<?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>67176</bug_id>
          
          <creation_ts>2011-08-29 18:53:37 -0700</creation_ts>
          <short_desc>JavaScriptCore does not have tiered compilation</short_desc>
          <delta_ts>2011-09-06 02:23:13 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>458645</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 18:53:37 -0700</bug_when>
    <thetext>JSC does not support the notion of a piece of JS code being recompiled.  This prevents the implementation of a number of interesting features:

1) Profile-driven optimization in DFG JIT.

2) JITing code only after the code is hot.

3) Having a JIT so powerful that it would be prohibitive to run it for every function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458650</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 19:21:48 -0700</bug_when>
    <thetext>Here is the performance of tiered compilation, without any optimizations that would benefit from tiered compilation.  As in:

1) There is no profile-driven compilation.

2) We always JIT code.  The first tier JIT is the old JIT, and the second tier JIT is the DFG.

3) The DFG JIT is not so much more expensive than the old JIT that tiering would reduce compile times significantly.

As in, this is an worst-case scenario measurement - it gives us the worst-case pathological cost of not immediately compiling with the DFG.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;TieringEnabled&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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             TieringEnabled                                 
SunSpider:
   3d-cube                                7.5697+-0.1302    !     8.1947+-0.1789       ! definitely 1.0826x slower
   3d-morph                               7.3310+-0.1581    !     7.6346+-0.1198       ! definitely 1.0414x slower
   3d-raytrace                            7.5872+-0.1801    !     8.6595+-0.2115       ! definitely 1.1413x slower
   access-binary-trees                    2.3936+-0.1317    ?     2.4144+-0.0996       ?
   access-fannkuch                       11.7383+-0.1824    ?    12.0820+-0.2585       ? might be 1.0293x slower
   access-nbody                           4.2421+-0.0683    ?     4.3795+-0.1220       ? might be 1.0324x slower
   access-nsieve                          2.4851+-0.0591    !     2.6592+-0.0485       ! definitely 1.0701x slower
   bitops-3bit-bits-in-byte               1.7253+-0.0628    ?     1.8459+-0.0681       ? might be 1.0699x slower
   bitops-bits-in-byte                    4.5103+-0.2142    !     4.9207+-0.0933       ! definitely 1.0910x slower
   bitops-bitwise-and                     3.6722+-0.0712    !     4.0303+-0.1294       ! definitely 1.0975x slower
   bitops-nsieve-bits                     5.4084+-0.1234    ?     5.4185+-0.0880       ?
   controlflow-recursive                  2.0106+-0.0685    ?     2.0777+-0.0619       ? might be 1.0334x slower
   crypto-aes                             6.4807+-0.1584    !     7.1072+-0.2762       ! definitely 1.0967x slower
   crypto-md5                             2.8333+-0.0827    !     3.0637+-0.0605       ! definitely 1.0813x slower
   crypto-sha1                            2.1963+-0.0656    !     2.4276+-0.0576       ! definitely 1.1053x slower
   date-format-tofte                     10.1948+-0.3012    ?    10.3135+-0.3361       ? might be 1.0116x slower
   date-format-xparb                      8.3079+-0.1122    !     9.1526+-0.2566       ! definitely 1.1017x slower
   math-cordic                            6.4793+-0.3005    ?     6.5032+-0.1603       ?
   math-partial-sums                      7.7221+-0.1542          7.4640+-0.1467         might be 1.0346x faster
   math-spectral-norm                     2.4993+-0.0623    ?     2.6149+-0.0656       ? might be 1.0463x slower
   regexp-dna                            10.2265+-0.2753         10.0736+-0.2134         might be 1.0152x faster
   string-base64                          6.0017+-0.2027          6.0012+-0.0787       
   string-fasta                           7.4792+-0.2292          7.1326+-0.1780         might be 1.0486x faster
   string-tagcloud                       13.4894+-0.2745         13.0466+-0.2483         might be 1.0339x faster
   string-unpack-code                    18.3762+-0.3810    ?    19.0636+-0.4548       ? might be 1.0374x slower
   string-validate-input                  6.9764+-0.2309          6.8614+-0.2039         might be 1.0168x faster

   &lt;arithmetic&gt;                           6.5360+-0.0434    !     6.7363+-0.0402       ! definitely 1.0306x slower
   &lt;geometric&gt;                            5.4317+-0.0374    !     5.6435+-0.0279       ! definitely 1.0390x slower
   &lt;harmonic&gt;                             4.4484+-0.0301    !     4.6648+-0.0340       ! definitely 1.0486x slower

                                            TipOfTree             TieringEnabled                                 
V8:
   crypto                                90.1561+-0.4657    !    92.6007+-0.5567       ! definitely 1.0271x slower
   deltablue                            261.2825+-1.2059    !   265.1254+-1.7597       ! definitely 1.0147x slower
   earley-boyer                         101.1890+-0.4968    !   104.4750+-0.2499       ! definitely 1.0325x slower
   raytrace                              77.7841+-0.3200    ?    77.9236+-0.4897       ?
   regexp                               108.4768+-0.6381    !   111.4160+-0.3292       ! definitely 1.0271x slower
   richards                             241.2977+-1.2640    !   249.0259+-2.2002       ! definitely 1.0320x slower
   splay                                109.6627+-0.5339    ^   108.3732+-0.5277       ^ definitely 1.0119x faster

   &lt;arithmetic&gt;                         141.4070+-0.2960    !   144.1343+-0.6120       ! definitely 1.0193x slower
   &lt;geometric&gt;                          126.9741+-0.2363    !   129.1974+-0.3898       ! definitely 1.0175x slower
   &lt;harmonic&gt;                           116.3908+-0.2368    !   118.2490+-0.2897       ! definitely 1.0160x slower

                                            TipOfTree             TieringEnabled                                 
Kraken:
   ai-astar                            1099.4152+-8.6736    ^  1081.0538+-7.3193       ^ definitely 1.0170x faster
   audio-beat-detection                 464.7362+-1.6339    !   475.2486+-2.9215       ! definitely 1.0226x slower
   audio-dft                            421.8051+-3.9788    ?   423.8868+-3.3273       ?
   audio-fft                            374.3489+-3.1956    ^   369.9372+-0.9839       ^ definitely 1.0119x faster
   audio-oscillator                     375.2353+-0.4462    ^   357.1955+-3.6390       ^ definitely 1.0505x faster
   imaging-darkroom                     534.1020+-7.4953    ?   536.1056+-3.3782       ?
   imaging-desaturate                   591.7430+-6.5169    ?   596.3413+-6.6589       ?
   imaging-gaussian-blur               1727.0032+-7.2924    !  2019.4240+-18.6047      ! definitely 1.1693x slower
   json-parse-financial                  49.2286+-1.2706         48.5747+-0.3344         might be 1.0135x faster
   json-stringify-tinderbox              61.5364+-0.3364    ?    62.2929+-0.4507       ? might be 1.0123x slower
   stanford-crypto-aes                  145.0281+-0.7231    ?   147.0604+-1.3901       ? might be 1.0140x slower
   stanford-crypto-ccm                  110.8017+-0.2247    !   113.3705+-0.4937       ! definitely 1.0232x slower
   stanford-crypto-pbkdf2               337.3557+-1.4168    ?   339.8807+-3.2412       ?
   stanford-crypto-sha256-iterative     129.9748+-0.6521    ?   130.0296+-0.8055       ?

   &lt;arithmetic&gt;                         458.7367+-1.0545    !   478.6001+-1.4694       ! definitely 1.0433x slower
   &lt;geometric&gt;                          293.5137+-0.6624    !   296.9148+-0.5346       ! definitely 1.0116x slower
   &lt;harmonic&gt;                           179.3067+-1.1042    ?   179.8807+-0.5467       ?

                                            TipOfTree             TieringEnabled                                 
All benchmarks:
   &lt;arithmetic&gt;                         161.3213+-0.3186    !   167.7550+-0.4560       ! definitely 1.0399x slower
   &lt;geometric&gt;                           28.5043+-0.0949    !    29.2899+-0.0912       ! definitely 1.0276x slower
   &lt;harmonic&gt;                             7.8556+-0.0515    !     8.2301+-0.0588       ! definitely 1.0477x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458655</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 19:38:00 -0700</bug_when>
    <thetext>Here&apos;s the performance with the patch (that I&apos;m about to put up) with TIERED_COMPILATION disabled.  It appears to be neutral.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;TieringDisabled&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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            TieringDisabled                                 
SunSpider:
   3d-cube                                7.5376+-0.1175    ?     7.7058+-0.3003       ? might be 1.0223x slower
   3d-morph                               7.3861+-0.1502    ?     7.4441+-0.1638       ?
   3d-raytrace                            7.9061+-0.1573          7.7273+-0.1972         might be 1.0231x faster
   access-binary-trees                    2.2056+-0.0434    ?     2.3275+-0.1729       ? might be 1.0553x slower
   access-fannkuch                       11.8176+-0.2460    ?    11.8344+-0.2259       ?
   access-nbody                           4.3464+-0.1199          4.2083+-0.0448         might be 1.0328x faster
   access-nsieve                          2.5201+-0.0780          2.4449+-0.0236         might be 1.0308x faster
   bitops-3bit-bits-in-byte               1.7132+-0.0409    ?     1.7336+-0.0583       ? might be 1.0119x slower
   bitops-bits-in-byte                    4.4561+-0.2215    ?     4.4569+-0.2233       ?
   bitops-bitwise-and                     3.7906+-0.1316          3.6795+-0.0828         might be 1.0302x faster
   bitops-nsieve-bits                     5.4563+-0.1567          5.4409+-0.1175       
   controlflow-recursive                  2.0028+-0.0456    ?     2.0519+-0.0506       ? might be 1.0245x slower
   crypto-aes                             6.5796+-0.1957          6.5665+-0.2603       
   crypto-md5                             2.7610+-0.0811    ?     2.7837+-0.1032       ?
   crypto-sha1                            2.2108+-0.0583    ?     2.2621+-0.0746       ? might be 1.0232x slower
   date-format-tofte                     10.0549+-0.2862    ?    10.0583+-0.2622       ?
   date-format-xparb                      8.5015+-0.2033    ?     8.6012+-0.2057       ? might be 1.0117x slower
   math-cordic                            6.3485+-0.1002          6.2499+-0.0975         might be 1.0158x faster
   math-partial-sums                      7.8015+-0.1462          7.6821+-0.1618         might be 1.0155x faster
   math-spectral-norm                     2.4839+-0.0601    ?     2.5007+-0.0551       ?
   regexp-dna                            10.2690+-0.2139    ?    10.4431+-0.1691       ? might be 1.0169x slower
   string-base64                          5.9300+-0.1266    ?     6.0768+-0.1648       ? might be 1.0248x slower
   string-fasta                           7.5471+-0.2306    ?     7.6356+-0.2971       ? might be 1.0117x slower
   string-tagcloud                       13.1309+-0.2623    ?    13.2849+-0.2355       ? might be 1.0117x slower
   string-unpack-code                    18.4339+-0.3087    ?    18.6805+-0.4475       ? might be 1.0134x slower
   string-validate-input                  6.9646+-0.2545    ?     7.2475+-0.1046       ? might be 1.0406x slower

   &lt;arithmetic&gt;                           6.5445+-0.0258    ?     6.5818+-0.0279       ?
   &lt;geometric&gt;                            5.4303+-0.0209    ?     5.4580+-0.0307       ?
   &lt;harmonic&gt;                             4.4312+-0.0178    ?     4.4605+-0.0364       ?

                                            TipOfTree            TieringDisabled                                 
V8:
   crypto                                89.7999+-0.4161    ?    90.5472+-0.3796       ?
   deltablue                            261.8698+-0.8554    !   267.0150+-1.3306       ! definitely 1.0196x slower
   earley-boyer                         101.2657+-0.6838    ?   102.4584+-1.3149       ? might be 1.0118x slower
   raytrace                              77.6936+-0.2382    ?    77.9529+-1.3854       ?
   regexp                               109.3492+-0.6109        108.4792+-0.4163       
   richards                             240.9417+-1.7815        240.3986+-0.6354       
   splay                                108.7129+-0.9346    ?   108.9099+-0.8099       ?

   &lt;arithmetic&gt;                         141.3761+-0.3684    !   142.2516+-0.3139       ! definitely 1.0062x slower
   &lt;geometric&gt;                          126.8950+-0.2565    ?   127.5128+-0.3834       ?
   &lt;harmonic&gt;                           116.2815+-0.1985    ?   116.7642+-0.4657       ?

                                            TipOfTree            TieringDisabled                                 
Kraken:
   ai-astar                            1103.8657+-8.3351    ^  1087.3269+-2.9530       ^ definitely 1.0152x faster
   audio-beat-detection                 467.9644+-1.6541    ?   469.2818+-1.6212       ?
   audio-dft                            419.3480+-5.3797        415.8305+-3.9171       
   audio-fft                            370.3477+-0.7266    !   372.8229+-0.6572       ! definitely 1.0067x slower
   audio-oscillator                     377.0762+-3.1503    !   384.9752+-2.9895       ! definitely 1.0209x slower
   imaging-darkroom                     529.8054+-1.8055    ?   533.5978+-5.9939       ?
   imaging-desaturate                   588.5433+-6.8542        587.1311+-6.6282       
   imaging-gaussian-blur               1736.0974+-10.3083      1722.0121+-6.5547       
   json-parse-financial                  48.0002+-0.3510    !    49.2782+-0.7477       ! definitely 1.0266x slower
   json-stringify-tinderbox              61.6009+-0.2921    !    62.3810+-0.3903       ! definitely 1.0127x slower
   stanford-crypto-aes                  144.3355+-0.5705    ?   145.9901+-2.8725       ? might be 1.0115x slower
   stanford-crypto-ccm                  111.3489+-0.3694    !   113.0364+-1.1566       ! definitely 1.0152x slower
   stanford-crypto-pbkdf2               336.8550+-1.3959    ?   336.9365+-1.4817       ?
   stanford-crypto-sha256-iterative     130.2361+-0.6723    ^   128.8800+-0.4144       ^ definitely 1.0105x faster

   &lt;arithmetic&gt;                         458.9589+-1.5070        457.8200+-1.0110       
   &lt;geometric&gt;                          292.8484+-0.6801    ?   294.0579+-0.7532       ?
   &lt;harmonic&gt;                           178.1834+-0.3880    !   180.2808+-1.0294       ! definitely 1.0118x slower

                                            TipOfTree            TieringDisabled                                 
All benchmarks:
   &lt;arithmetic&gt;                         161.3875+-0.4462        161.1994+-0.3013       
   &lt;geometric&gt;                           28.4787+-0.0634    ?    28.6145+-0.0824       ?
   &lt;harmonic&gt;                             7.8251+-0.0308    ?     7.8771+-0.0627       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458658</commentid>
    <comment_count>3</comment_count>
      <attachid>105564</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 19:43:10 -0700</bug_when>
    <thetext>Created attachment 105564
work in progress

Not yet ready for review (tests still running, some asm work not yet ported to other architectures).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458659</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-29 19:45:01 -0700</bug_when>
    <thetext>Attachment 105564 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/CodeBlock.h:217:  The parameter name &quot;symbolTable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:311:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:311:  The parameter name &quot;scopeChainNode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:374:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:374:  The parameter name &quot;scopeChainNode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:455:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:455:  The parameter name &quot;scopeChainNode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:478:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Executable.h:478:  The parameter name &quot;scopeChainNode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:1454:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:1814:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 11 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458662</commentid>
    <comment_count>5</comment_count>
      <attachid>105565</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 20:04:05 -0700</bug_when>
    <thetext>Created attachment 105565
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458663</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 20:04:55 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=105565) [details]
&gt; the patch (fix style)

This now passes tests with tiering disabled, and has style fixes.  Now I just want to test again, to make sure that the tiering-disabled fixes don&apos;t break tiering-enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458669</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 20:34:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Created an attachment (id=105565) [details] [details]
&gt; &gt; the patch (fix style)
&gt; 
&gt; This now passes tests with tiering disabled, and has style fixes.  Now I just want to test again, to make sure that the tiering-disabled fixes don&apos;t break tiering-enabled.

Tests pass with and without tiering enabled.  The web is usable with tiering enabled.  Now checking if the web is usable with tiering disabled...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458679</commentid>
    <comment_count>8</comment_count>
      <attachid>105565</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-29 21:11:47 -0700</bug_when>
    <thetext>Comment on attachment 105565
the patch (fix style)

All tests pass.  The web is usable with and without tiered compilation enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459146</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-08-30 13:36:49 -0700</bug_when>
    <thetext>&gt; wtf/DoublyLinkedSentinelList.h: Added.

I think WTF::SentinelLinkedList can work for your purposes. Would be nice to only have one such class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459149</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-30 13:41:05 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; wtf/DoublyLinkedSentinelList.h: Added.
&gt; 
&gt; I think WTF::SentinelLinkedList can work for your purposes. Would be nice to only have one such class.

Note quite: SentinelLinkedList would result in inlining two copies of CallLinkInfo into CodeBlock.  CallLinkInfo is a big-ish structure.  I&apos;m totally fine with doing that except for the increased mem usage.

So what do you think?  Have one such class but more space usage, or have two and win back ~10 words or so per CodeBlock?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459207</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-08-30 14:35:57 -0700</bug_when>
    <thetext>+// Finally, it differs from SentinelLinkedList by ensuring that the
+// sentinels only have next/prev pointers instead of the full contents of
+// the node structure. This makes DoublyLinkedSentinelList great for cases
+// where the nodes are large.

Sorry, didn&apos;t finish reading and see this comment.

&gt; SentinelLinkedList would result in inlining two copies of CallLinkInfo into CodeBlock. 

What we definitely don&apos;t want is two classes with similar-sounding names that don&apos;t distinguish what&apos;s different between them. &quot;DoublyLinkedSentinelList&quot; isn&apos;t a very good way to distinguish vs &quot;SentinelLinkedList&quot;, since they&apos;re both doubly linked, and it doesn&apos;t say what&apos;s actually different between them (the inlining of the full node vs just prev/next pointers).

We also probably don&apos;t want two different implementations of very similar algorithms, if we can avoid it.

To solve this problem, how about templatizing the existing SentinelLinkedList to be SentinelLinkedList&lt;T, Node=SentinelLinkedListNode&lt;T&gt; &gt;, to allow clients to specialize as necessary for a class that doesn&apos;t inherit from SentinelLinkedListNode? (Internally, SentinelLinkedList would only deal in Node*, but when returning a Node* to the client, it would static_cast to T*.)

Then, HandleHeap would use SentinelLinkedList&lt;HandleHeap::Node, HandleHeap::Node&gt;, and this patch would use SentinelLinkedList&lt;CallLinkInfo&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459213</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-30 14:37:36 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; +// Finally, it differs from SentinelLinkedList by ensuring that the
&gt; +// sentinels only have next/prev pointers instead of the full contents of
&gt; +// the node structure. This makes DoublyLinkedSentinelList great for cases
&gt; +// where the nodes are large.
&gt; 
&gt; Sorry, didn&apos;t finish reading and see this comment.
&gt; 
&gt; &gt; SentinelLinkedList would result in inlining two copies of CallLinkInfo into CodeBlock. 
&gt; 
&gt; What we definitely don&apos;t want is two classes with similar-sounding names that don&apos;t distinguish what&apos;s different between them. &quot;DoublyLinkedSentinelList&quot; isn&apos;t a very good way to distinguish vs &quot;SentinelLinkedList&quot;, since they&apos;re both doubly linked, and it doesn&apos;t say what&apos;s actually different between them (the inlining of the full node vs just prev/next pointers).
&gt; 
&gt; We also probably don&apos;t want two different implementations of very similar algorithms, if we can avoid it.
&gt; 
&gt; To solve this problem, how about templatizing the existing SentinelLinkedList to be SentinelLinkedList&lt;T, Node=SentinelLinkedListNode&lt;T&gt; &gt;, to allow clients to specialize as necessary for a class that doesn&apos;t inherit from SentinelLinkedListNode? (Internally, SentinelLinkedList would only deal in Node*, but when returning a Node* to the client, it would static_cast to T*.)
&gt; 
&gt; Then, HandleHeap would use SentinelLinkedList&lt;HandleHeap::Node, HandleHeap::Node&gt;, and this patch would use SentinelLinkedList&lt;CallLinkInfo&gt;.

This sounds good, I&apos;ll give it a shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459407</commentid>
    <comment_count>13</comment_count>
      <attachid>105733</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-30 20:37:04 -0700</bug_when>
    <thetext>Created attachment 105733
the patch - fix review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459914</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-31 14:12:21 -0700</bug_when>
    <thetext>The latest performance of this patch:


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc
&quot;TieringDisabled&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc

Collected 18 samples per benchmark/VM, with 6 VM invocations per benchmark. 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            TieringDisabled                                 
SunSpider:
   3d-cube                                8.2834+-0.0364          8.2577+-0.0268       
   3d-morph                               8.1428+-0.0572          8.1077+-0.0321       
   3d-raytrace                            8.3447+-0.0734          8.2389+-0.0536         might be 1.0128x faster
   access-binary-trees                    2.5759+-0.0295          2.5376+-0.0195         might be 1.0151x faster
   access-fannkuch                       13.0586+-0.0459    ?    13.0897+-0.0386       ?
   access-nbody                           4.9319+-0.0224    ?     4.9500+-0.0322       ?
   access-nsieve                          3.0545+-0.0191    ?     3.0591+-0.0254       ?
   bitops-3bit-bits-in-byte               1.8822+-0.0140          1.8570+-0.0186         might be 1.0136x faster
   bitops-bits-in-byte                    5.6499+-0.0987          5.6485+-0.0961       
   bitops-bitwise-and                     4.1460+-0.0288          4.1221+-0.0225       
   bitops-nsieve-bits                     5.7399+-0.0354          5.7095+-0.0371       
   controlflow-recursive                  2.2823+-0.0281    ?     2.3029+-0.0331       ?
   crypto-aes                             6.8808+-0.0355          6.8423+-0.0293       
   crypto-md5                             3.0541+-0.0535          3.0423+-0.0357       
   crypto-sha1                            2.4634+-0.0340          2.4452+-0.0260       
   date-format-tofte                     11.1781+-0.1704         11.0855+-0.1969       
   date-format-xparb                      9.3850+-0.0766    !     9.7049+-0.0942       ! definitely 1.0341x slower
   math-cordic                            7.0896+-0.0331          7.0832+-0.0353       
   math-partial-sums                     10.7382+-0.0415    ^    10.6581+-0.0225       ^ definitely 1.0075x faster
   math-spectral-norm                     2.7366+-0.0245    ?     2.7499+-0.0275       ?
   regexp-dna                            12.0810+-0.0976    ?    12.1257+-0.0889       ?
   string-base64                          6.5605+-0.0861          6.5471+-0.0790       
   string-fasta                           8.3149+-0.0272    ?     8.3204+-0.0309       ?
   string-tagcloud                       15.0926+-0.1070    ?    15.2919+-0.1229       ? might be 1.0132x slower
   string-unpack-code                    20.6676+-0.0894    ?    20.6991+-0.1211       ?
   string-validate-input                  7.5367+-0.2107    ?     7.6801+-0.2017       ? might be 1.0190x slower

   &lt;arithmetic&gt;                           7.3797+-0.0296    ?     7.3906+-0.0288       ?
   &lt;geometric&gt;                            6.1216+-0.0265          6.1210+-0.0254       
   &lt;harmonic&gt;                             5.0008+-0.0258          4.9910+-0.0263       

                                            TipOfTree            TieringDisabled                                 
V8:
   crypto                               102.7261+-0.2975    ?   102.8874+-0.2085       ?
   deltablue                            298.8926+-1.6919        298.6987+-1.9454       
   earley-boyer                         122.4942+-0.3332    ?   122.6251+-0.2529       ?
   raytrace                              87.8440+-0.5329         87.6053+-0.7894       
   regexp                               131.1448+-0.5178    !   132.5521+-0.3833       ! definitely 1.0107x slower
   richards                             301.1331+-0.5884        300.9316+-1.3004       
   splay                                156.6207+-1.4762        156.5469+-0.9595       

   &lt;arithmetic&gt;                         171.5508+-0.3431    ?   171.6924+-0.3451       ?
   &lt;geometric&gt;                          153.8781+-0.2491    ?   154.0718+-0.2973       ?
   &lt;harmonic&gt;                           140.1027+-0.2176    ?   140.2896+-0.3298       ?

                                            TipOfTree            TieringDisabled                                 
Kraken:
   ai-astar                            1662.2271+-14.8888   ?  1662.3195+-15.2833      ?
   audio-beat-detection                 541.9177+-3.5377        538.8129+-1.4198       
   audio-dft                            451.6485+-2.3367        449.9374+-2.8209       
   audio-fft                            422.3728+-2.3541        419.6235+-0.6314       
   audio-oscillator                     408.6592+-3.3316    ^   404.3170+-0.6803       ^ definitely 1.0107x faster
   imaging-darkroom                     586.6719+-1.3957    ?   594.6635+-7.4560       ? might be 1.0136x slower
   imaging-desaturate                   635.8691+-13.4831   ?   636.3929+-13.6931      ?
   imaging-gaussian-blur               1854.6785+-2.7334       1850.4129+-2.9003       
   json-parse-financial                  62.4728+-0.4730    !    63.5460+-0.1337       ! definitely 1.0172x slower
   json-stringify-tinderbox              75.8496+-0.1552         75.5888+-0.1383       
   stanford-crypto-aes                  166.6060+-0.4238        166.5077+-0.4959       
   stanford-crypto-ccm                  130.7967+-0.3259    ?   130.9919+-0.4046       ?
   stanford-crypto-pbkdf2               376.4091+-1.3560    ^   371.4304+-1.1870       ^ definitely 1.0134x faster
   stanford-crypto-sha256-iterative     144.4347+-0.3728    ?   144.4837+-0.5826       ?

   &lt;arithmetic&gt;                         537.1867+-1.4454        536.3592+-1.7807       
   &lt;geometric&gt;                          339.6910+-0.7336        339.3740+-0.9549       
   &lt;harmonic&gt;                           213.0308+-0.4558    ?   213.5641+-0.4034       ?

                                            TipOfTree            TieringDisabled                                 
All benchmarks:
   &lt;arithmetic&gt;                         189.6455+-0.4455        189.4262+-0.5564       
   &lt;geometric&gt;                           32.7321+-0.0950         32.7274+-0.0929       
   &lt;harmonic&gt;                             8.8432+-0.0447          8.8266+-0.0455</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461706</commentid>
    <comment_count>15</comment_count>
      <attachid>106240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-02 19:50:03 -0700</bug_when>
    <thetext>Created attachment 106240
work in progress

Decided to combine the tiering patch with implementing dynamic optimization, because it turns out that my efforts to get dynamic optimization working revealed the need to make some changes to tiering heuristics.  This patch is not in reviewable state yet, because it depends on a value profiling patch that is still in the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461709</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 19:53:52 -0700</bug_when>
    <thetext>Attachment 106240 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;PerformanceTests/SunSpider/tests/v8-v6/v8-...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGPropagation.cpp:62:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/bytecode/ValueProfile.h:168:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/bytecode/ValueProfile.h:172:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:261:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 39 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461713</commentid>
    <comment_count>17</comment_count>
      <attachid>106240</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-02 20:11:02 -0700</bug_when>
    <thetext>Comment on attachment 106240
work in progress

Attachment 106240 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9586660</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461745</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-02 22:23:57 -0700</bug_when>
    <thetext>Tiered compilation - even in this current fairly dumb form - is starting to show signs of goodness.  When combined with https://bugs.webkit.org/show_bug.cgi?id=67553, we get a 10% speed-up on v8-crypto.  Other benchmarks are still hurting because of a lack of OSR (so many benchmarks never tier up) and the fact that the DFG back-end still doesn&apos;t properly incorporate the rich set of numeric predictions we now have (bottom, int-static, int, double, number, top).


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;DynamicOpt&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc
&quot;DynamicOpt2&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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               DynamicOpt             DynamicOpt2          DynamicOpt2 v. TipOfTree 
SunSpider:
   3d-cube                                7.9698+-0.2087    !    12.3583+-0.2144    ?    12.4259+-0.2686       ! definitely 1.5591x slower
   3d-morph                               7.7744+-0.1793    !     8.1831+-0.1140    ?     8.1930+-0.2560       ? might be 1.0538x slower
   3d-raytrace                            7.6502+-0.1953    !     8.4078+-0.1219    ?     8.7114+-0.3048       ! definitely 1.1387x slower
   access-binary-trees                    2.3893+-0.0906    ?     2.4728+-0.0687          2.4634+-0.0682       ? might be 1.0310x slower
   access-fannkuch                       11.9543+-0.2186    !    13.0364+-0.2499         13.0251+-0.2684       ! definitely 1.0896x slower
   access-nbody                           4.4484+-0.1560          4.3845+-0.0838          4.3802+-0.0679         might be 1.0156x faster
   access-nsieve                          2.5408+-0.0307    !     2.7409+-0.0567    ?     2.7937+-0.1355       ! definitely 1.0995x slower
   bitops-3bit-bits-in-byte               1.7154+-0.0824    !     1.9264+-0.0602          1.9255+-0.0443       ! definitely 1.1224x slower
   bitops-bits-in-byte                    4.5476+-0.2678    !     5.3181+-0.2523    ?     5.5533+-0.3096       ! definitely 1.2211x slower
   bitops-bitwise-and                     3.6850+-0.0556    !     4.0393+-0.1645    ?     4.0762+-0.0869       ! definitely 1.1062x slower
   bitops-nsieve-bits                     5.5807+-0.2016    !     5.9615+-0.1491    ?     5.9727+-0.1217       ! definitely 1.0702x slower
   controlflow-recursive                  2.0337+-0.0349    ?     2.0952+-0.0382          2.0585+-0.0367       ? might be 1.0122x slower
   crypto-aes                             6.8239+-0.1930    !     8.0399+-0.3227          7.8494+-0.3143       ! definitely 1.1503x slower
   crypto-md5                             2.8098+-0.0809    !     2.9741+-0.0799          2.9550+-0.0900       ? might be 1.0517x slower
   crypto-sha1                            2.2982+-0.0805    !     2.4675+-0.0638    ?     2.5981+-0.1117       ! definitely 1.1305x slower
   date-format-tofte                     10.2719+-0.2905    !    10.8794+-0.2106         10.5788+-0.2598       ? might be 1.0299x slower
   date-format-xparb                      8.7886+-0.1802    !     9.7157+-0.2797          9.5360+-0.2017       ! definitely 1.0850x slower
   math-cordic                            6.4300+-0.1255    !     6.8179+-0.0991          6.8140+-0.1386       ! definitely 1.0597x slower
   math-partial-sums                      7.7420+-0.1017          7.6207+-0.1555    ?     7.7644+-0.1373       ?
   math-spectral-norm                     2.5527+-0.0737    ?     2.6611+-0.0927    ?     2.7136+-0.0870       ! definitely 1.0630x slower
   regexp-dna                            10.5863+-0.2935         10.4799+-0.1675         10.3336+-0.1690         might be 1.0245x faster
   string-base64                          6.1758+-0.1848    ?     6.4751+-0.1442    ?     6.4844+-0.2474       ? might be 1.0500x slower
   string-fasta                           7.6886+-0.2365          7.4774+-0.1863          7.4341+-0.1208         might be 1.0342x faster
   string-tagcloud                       12.4531+-0.4789    ?    12.5956+-0.4655         12.5680+-0.3960       ?
   string-unpack-code                    18.8142+-0.2687    ?    19.4565+-0.5111         19.2330+-0.4460       ? might be 1.0223x slower
   string-validate-input                  7.2405+-0.3145          7.0192+-0.2957          6.8666+-0.1451         might be 1.0545x faster

   &lt;arithmetic&gt;                           6.6525+-0.0370    !     7.1386+-0.0312          7.1272+-0.0400       ! definitely 1.0714x slower
   &lt;geometric&gt;                            5.5352+-0.0272    !     5.9295+-0.0265    ?     5.9402+-0.0369       ! definitely 1.0732x slower
   &lt;harmonic&gt;                             4.5247+-0.0275    !     4.8366+-0.0343    ?     4.8590+-0.0477       ! definitely 1.0739x slower

                                            TipOfTree               DynamicOpt             DynamicOpt2          DynamicOpt2 v. TipOfTree 
V8:
   crypto                                92.1294+-0.3719    !    97.0536+-1.8706    ^    83.3741+-0.6893       ^ definitely 1.1050x faster
   deltablue                            143.2966+-1.3033        142.6860+-1.3562    ^   138.8982+-0.6696       ^ definitely 1.0317x faster
   earley-boyer                         100.6071+-0.4585    !   108.4473+-0.9126        108.2658+-1.2111       ! definitely 1.0761x slower
   raytrace                              52.3645+-0.4948    !    55.0936+-0.4014    ?    55.6850+-0.4855       ! definitely 1.0634x slower
   regexp                               110.4607+-0.8697    ?   110.7716+-0.3791    !   112.5372+-1.1640       ! definitely 1.0188x slower
   richards                             247.5590+-1.0163    ^   235.0075+-1.6766        234.1091+-0.7328       ^ definitely 1.0575x faster
   splay                                104.8805+-0.7566    ?   106.2095+-0.5770    ^   104.7761+-0.6962       

   &lt;arithmetic&gt;                         121.6140+-0.2401    ?   122.1813+-0.3841    ^   119.6636+-0.2768       ^ definitely 1.0163x faster
   &lt;geometric&gt;                          110.3617+-0.2388    !   112.5381+-0.4232    ^   109.8188+-0.2973       ^ definitely 1.0049x faster
   &lt;harmonic&gt;                           100.7142+-0.3088    !   103.8665+-0.4832    ^   101.3032+-0.3159       ?

                                            TipOfTree               DynamicOpt             DynamicOpt2          DynamicOpt2 v. TipOfTree 
Kraken:
   ai-astar                            1105.0592+-7.7066    !  1130.2690+-4.0420    !  1147.0835+-6.9637       ! definitely 1.0380x slower
   audio-beat-detection                 480.9968+-2.2409    !   510.7421+-2.2406    ?   516.0047+-4.2511       ! definitely 1.0728x slower
   audio-dft                            443.7356+-16.1293   !   477.5576+-6.2779    ?   479.8115+-6.7655       ! definitely 1.0813x slower
   audio-fft                            378.2326+-4.0596    !   394.4044+-3.0770    !   401.4458+-2.2673       ! definitely 1.0614x slower
   audio-oscillator                     381.0797+-1.3206    ^   355.8970+-2.5926        355.7188+-2.0398       ^ definitely 1.0713x faster
   imaging-darkroom                     540.2286+-3.5820    ?   550.3868+-7.1062    ^   540.4649+-2.3819       ?
   imaging-desaturate                   606.5337+-7.1713    ?   608.6832+-5.2899        606.8448+-1.6518       ?
   imaging-gaussian-blur               1753.3311+-11.1394   !  2310.2974+-5.2848    ?  2320.8847+-16.6530      ! definitely 1.3237x slower
   json-parse-financial                  48.0398+-0.4362    ^    47.3302+-0.2202    !    48.6760+-0.1937       ! definitely 1.0132x slower
   json-stringify-tinderbox              75.2160+-1.0468         74.0179+-0.2819    ?    74.3878+-0.9351         might be 1.0111x faster
   stanford-crypto-aes                  148.1361+-0.7944    !   163.0568+-0.9930        162.7343+-0.9379       ! definitely 1.0985x slower
   stanford-crypto-ccm                  113.2673+-1.2877    !   126.0253+-1.6922    ?   126.2694+-1.5381       ! definitely 1.1148x slower
   stanford-crypto-pbkdf2               343.6412+-1.8972    !   367.0378+-2.6543        363.8759+-2.2831       ! definitely 1.0589x slower
   stanford-crypto-sha256-iterative     133.1163+-0.9564    !   140.6644+-1.3553    ?   143.2696+-1.3289       ! definitely 1.0763x slower

   &lt;arithmetic&gt;                         467.9010+-1.5248    !   518.3121+-1.0232    !   520.5337+-0.8504       ! definitely 1.1125x slower
   &lt;geometric&gt;                          302.6273+-0.8312    !   318.6361+-0.7012    !   320.3008+-0.4731       ! definitely 1.0584x slower
   &lt;harmonic&gt;                           187.3953+-0.5625    !   192.5117+-0.5001    !   194.6711+-0.4082       ! definitely 1.0388x slower

                                            TipOfTree               DynamicOpt             DynamicOpt2          DynamicOpt2 v. TipOfTree 
All benchmarks:
   &lt;arithmetic&gt;                         161.1676+-0.4418    !   176.5371+-0.3106    ?   176.8176+-0.2616       ! definitely 1.0971x slower
   &lt;geometric&gt;                           28.4665+-0.0678    !    30.1160+-0.0719         30.0832+-0.1083       ! definitely 1.0568x slower
   &lt;harmonic&gt;                             7.9791+-0.0471    !     8.5209+-0.0588    ?     8.5580+-0.0820       ! definitely 1.0726x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461746</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-02 22:24:40 -0700</bug_when>
    <thetext>&gt; VMs tested:
&gt; &quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&gt; &quot;DynamicOpt&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc
&gt; &quot;DynamicOpt2&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc

Clarification: DynamicOpt is without https://bugs.webkit.org/show_bug.cgi?id=67553, while DynamicOpt2 includes it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461786</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 00:57:34 -0700</bug_when>
    <thetext>This now passes tests on Mac with tiering turned on or off, and is performance neutral:


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;DynamicOptOff&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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             DynamicOptOff                                  
SunSpider:
   3d-cube                                7.8026+-0.1319    ?     8.0115+-0.2923       ? might be 1.0268x slower
   3d-morph                               7.7991+-0.1005          7.7622+-0.1117       
   3d-raytrace                            7.5590+-0.1870    ?     7.7149+-0.1663       ? might be 1.0206x slower
   access-binary-trees                    2.2853+-0.0465    ?     2.3733+-0.0971       ? might be 1.0385x slower
   access-fannkuch                       11.9772+-0.1921    ?    12.0523+-0.2001       ?
   access-nbody                           4.2695+-0.0637    ?     4.3550+-0.0838       ? might be 1.0200x slower
   access-nsieve                          2.5857+-0.0623          2.5259+-0.0335         might be 1.0237x faster
   bitops-3bit-bits-in-byte               1.7484+-0.0610          1.7483+-0.0627       
   bitops-bits-in-byte                    4.5852+-0.2422    ?     4.6009+-0.2260       ?
   bitops-bitwise-and                     3.9057+-0.1456    ^     3.6829+-0.0259       ^ definitely 1.0605x faster
   bitops-nsieve-bits                     5.5786+-0.1629          5.5126+-0.1170         might be 1.0120x faster
   controlflow-recursive                  2.0641+-0.0366          2.0464+-0.0442       
   crypto-aes                             6.6893+-0.1335          6.6408+-0.1453       
   crypto-md5                             2.8474+-0.0735          2.8030+-0.0486         might be 1.0158x faster
   crypto-sha1                            2.2725+-0.0441          2.2244+-0.0288         might be 1.0216x faster
   date-format-tofte                     10.4639+-0.3802    ?    10.5192+-0.3720       ?
   date-format-xparb                      8.7383+-0.2265    ?     8.7740+-0.2847       ?
   math-cordic                            6.4347+-0.0758          6.4201+-0.1139       
   math-partial-sums                      7.7395+-0.1153    ?     7.7764+-0.1624       ?
   math-spectral-norm                     2.5587+-0.0453    ?     2.6333+-0.0696       ? might be 1.0292x slower
   regexp-dna                            10.4553+-0.1850    ?    10.4958+-0.3009       ?
   string-base64                          6.0972+-0.1483          6.0229+-0.0849         might be 1.0123x faster
   string-fasta                           7.6165+-0.1736          7.5390+-0.0975         might be 1.0103x faster
   string-tagcloud                       12.1907+-0.3555    ?    12.2377+-0.3733       ?
   string-unpack-code                    18.9763+-0.3913    ?    18.9901+-0.4418       ?
   string-validate-input                  7.3371+-0.2900    ?     7.4599+-0.3495       ? might be 1.0167x slower

   &lt;arithmetic&gt;                           6.6376+-0.0251    ?     6.6509+-0.0409       ?
   &lt;geometric&gt;                            5.5297+-0.0173    ?     5.5308+-0.0351       ?
   &lt;harmonic&gt;                             4.5317+-0.0182          4.5257+-0.0334       

                                            TipOfTree             DynamicOptOff                                  
V8:
   crypto                                92.2392+-0.3275         91.8243+-0.5196       
   deltablue                            142.5229+-0.8982        142.2090+-1.0506       
   earley-boyer                         100.9745+-0.8094    ?   101.6080+-0.3983       ?
   raytrace                              52.8335+-0.3815    ?    53.4131+-0.4945       ? might be 1.0110x slower
   regexp                               111.2927+-0.2813    ^   110.2772+-0.3147       ^ definitely 1.0092x faster
   richards                             247.2330+-0.5759    ?   249.2783+-2.2003       ?
   splay                                105.6152+-0.3719        104.7256+-0.7142       

   &lt;arithmetic&gt;                         121.8159+-0.2410    ?   121.9051+-0.3111       ?
   &lt;geometric&gt;                          110.7040+-0.2602    ?   110.7184+-0.2196       ?
   &lt;harmonic&gt;                           101.1695+-0.2987    ?   101.2719+-0.2621       ?

                                            TipOfTree             DynamicOptOff                                  
Kraken:
   ai-astar                            1114.1983+-9.0038       1113.4397+-6.8018       
   audio-beat-detection                 482.8746+-3.3869        482.4078+-3.1902       
   audio-dft                            438.5291+-5.3478    ?   443.8677+-8.3113       ? might be 1.0122x slower
   audio-fft                            371.6724+-0.6381    !   378.7265+-0.3997       ! definitely 1.0190x slower
   audio-oscillator                     386.6817+-0.6754    ^   381.2110+-0.8942       ^ definitely 1.0144x faster
   imaging-darkroom                     560.0890+-1.2229    ^   539.1056+-1.3278       ^ definitely 1.0389x faster
   imaging-desaturate                   601.8699+-6.3995        600.7752+-6.6430       
   imaging-gaussian-blur               1768.8532+-6.7428    ^  1754.3062+-2.6500       ^ definitely 1.0083x faster
   json-parse-financial                  48.5644+-0.2174    ?    48.5948+-0.3096       ?
   json-stringify-tinderbox              74.0839+-0.5558    ?    75.0791+-0.4754       ? might be 1.0134x slower
   stanford-crypto-aes                  147.1298+-1.2234    ?   148.3481+-0.5196       ?
   stanford-crypto-ccm                  112.6304+-0.2754    !   113.9235+-0.3058       ! definitely 1.0115x slower
   stanford-crypto-pbkdf2               349.9624+-3.3126        347.6330+-1.4456       
   stanford-crypto-sha256-iterative     133.9685+-0.4310    ^   133.0874+-0.4124       ^ definitely 1.0066x faster

   &lt;arithmetic&gt;                         470.7934+-0.5195    ^   468.6075+-0.9538       ^ definitely 1.0047x faster
   &lt;geometric&gt;                          303.5829+-0.5037        303.3028+-0.6546       
   &lt;harmonic&gt;                           187.5942+-0.5320    ?   188.1997+-0.4789       ?

                                            TipOfTree             DynamicOptOff                                  
All benchmarks:
   &lt;arithmetic&gt;                         162.0510+-0.1704    ^   161.4205+-0.2913       ^ definitely 1.0039x faster
   &lt;geometric&gt;                           28.4908+-0.0604         28.4865+-0.1037       
   &lt;harmonic&gt;                             7.9916+-0.0315          7.9817+-0.0575</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461787</commentid>
    <comment_count>21</comment_count>
      <attachid>106254</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 01:12:41 -0700</bug_when>
    <thetext>Created attachment 106254
the patch

This might be the one, if the bots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461791</commentid>
    <comment_count>22</comment_count>
      <attachid>106255</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 01:19:52 -0700</bug_when>
    <thetext>Created attachment 106255
the patch - fix conflicts, style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461793</commentid>
    <comment_count>23</comment_count>
      <attachid>106256</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 01:21:30 -0700</bug_when>
    <thetext>Created attachment 106256
the patch - removed spurious debug nonsense from v8-crypto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461801</commentid>
    <comment_count>24</comment_count>
      <attachid>106256</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 01:43:14 -0700</bug_when>
    <thetext>Comment on attachment 106256
the patch - removed spurious debug nonsense from v8-crypto

All tests pass after merge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461804</commentid>
    <comment_count>25</comment_count>
      <attachid>106257</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 02:01:17 -0700</bug_when>
    <thetext>Created attachment 106257
the patch - fix windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461806</commentid>
    <comment_count>26</comment_count>
      <attachid>106259</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 02:53:37 -0700</bug_when>
    <thetext>Created attachment 106259
the patch - another attempt to fix windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461809</commentid>
    <comment_count>27</comment_count>
      <attachid>106259</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-09-03 04:49:19 -0700</bug_when>
    <thetext>Comment on attachment 106259
the patch - another attempt to fix windows

Attachment 106259 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9591065</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461900</commentid>
    <comment_count>28</comment_count>
      <attachid>106276</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-03 21:38:58 -0700</bug_when>
    <thetext>Created attachment 106276
the patch - fix GTK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462279</commentid>
    <comment_count>29</comment_count>
      <attachid>106276</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-05 16:21:54 -0700</bug_when>
    <thetext>Comment on attachment 106276
the patch - fix GTK

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

r- for a few comments to look at, basically all looks good though.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:1006
&gt; +#if CPU(X86_64)

This should be using &apos;scratchRegister&apos;, not &apos;X86Registers::r11&apos;.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:227
&gt; +        PassOwnPtr&lt;CodeBlock&gt; releaseAlternative() { return m_alternative.release(); }

I think the code could probably be refactored quite easily to remove releaseAlternative(), and I think it would be easier to follow if we did so.

The code currently sets the m_fooBarCodeBlock variables on Executables quite aggressively, and then has to reset this value if compilation fails.  Now this involves switching CodeBlocks &amp; switching back - I think it would be conceptually cleaner to just store the new code block in a local RefPtr, and assign across (releasing from the local) to the member only if compilation succeeds.

&gt; Source/JavaScriptCore/dfg/DFGPropagation.cpp:35
&gt; +class Propagator {

Sorry to be a pain, but this .cpp &amp; .h should really probably be DFGPropagator.cpp/.h.

&gt; Source/JavaScriptCore/dfg/DFGPropagation.cpp:138
&gt; +            setPrediction(makePrediction(PredictInt32, DynamicPrediction));

If I understand this correctly, the value &apos;DynamicPrediction&apos; seems to be being used here to cover two different types of static predictions.
In the case of bitops &amp; valuetoint32, we can statically infer with absolute certainty that the result is an int32.
In the case of ArithMod &amp; UInt32ToNumber I guess you are assuming the results are highly likely to be int32, and as such want to give a string prediction rather than a weak one, despite this being static &amp; not dynamic?

If so, I&apos;d suggest adding a couple of new enum values, say StrongStaticPrediction &amp; StaticInference.  You could make their values equal to DynamicPrediction such that they will currently be handled the same for now, but give us the option to change how these predictions are merged with each other in the future.

&gt; Source/JavaScriptCore/jit/JITCode.h:52
&gt; +        

It might be more helpful to have a separate type indicating the compilation kind.  Using the JITType here artificially makes a tie between a policy (tiered compilation), and a set of particular mechanisms (BaselineJIT, DFGJIT).  Using the same enum to select may make it more difficult to reconfigure this in the future.  E.g. should we want to use the non-spec path of the DFG-JIT with optimization hooks as our low tier JIT &amp; a speculating compile from the DFG-JIT exploiting value profiling.

In such a case, I guess we can just replace DFGJIT with two new enum entries, &amp; deal with working out in all cases whether DFGJIT checks were checking for top tier or the new compiler.  But we may regret not having an explicit type for the tiers.

&gt; Source/JavaScriptCore/wtf/Platform.h:978
&gt; +#endif

Slightly verbose set of config, &amp; requires two switches setting - could just make this:

#if !defined(ENABLE_VALUE_PROFILER)
#define ENABLE_VALUE_PROFILER ENABLE_TIERED_COMPILATION
#endif
#if !defined(ENABLE_DYNAMIC_OPTIMIZATION)
#define ENABLE_DYNAMIC_OPTIMIZATION ENABLE_TIERED_COMPILATION
#endif

So by default both follow the ENABLE_TIERED_COMPILATION setting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462284</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 17:23:45 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:1006
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; This should be using &apos;scratchRegister&apos;, not &apos;X86Registers::r11&apos;.

I wanted to do that, but that won&apos;t work. :-(  scratchRegister is in MacroAssemblerX86_64.h.  I also can&apos;t move this branchAdd32 overload to the subclasses (MacroAssemblerX86_64 and MacroAssemblerX86) because if you have a subclass overloading something in a superclass, the compiler gets confused.  Basically if I have this particular overload of branchAdd32 in MacroAssemblerX86_64 then the branchAdd32&apos;s in MacroAssemblerX86Common get hidden.

So we have a number of choices for workarounds:

1) Keep it as is, and accept this as local ugliness.

2) Move the scratchRegister declaration to MacroAssemblerX86Common.

3) Move all branchAdd32 overloads to the MacroAssemblerX86_64 and MacroAssemblerX86.

4) Rename this particular overload of branchAdd32 and put it in MacroAssemblerX86_64.

Which do you prefer?  I&apos;m starting to like (4) best.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:227
&gt; &gt; +        PassOwnPtr&lt;CodeBlock&gt; releaseAlternative() { return m_alternative.release(); }
&gt; 
&gt; I think the code could probably be refactored quite easily to remove releaseAlternative(), and I think it would be easier to follow if we did so.
&gt; 
&gt; The code currently sets the m_fooBarCodeBlock variables on Executables quite aggressively, and then has to reset this value if compilation fails.  Now this involves switching CodeBlocks &amp; switching back - I think it would be conceptually cleaner to just store the new code block in a local RefPtr, and assign across (releasing from the local) to the member only if compilation succeeds.

+1

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGPropagation.cpp:35
&gt; &gt; +class Propagator {
&gt; 
&gt; Sorry to be a pain, but this .cpp &amp; .h should really probably be DFGPropagator.cpp/.h.

+1

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGPropagation.cpp:138
&gt; &gt; +            setPrediction(makePrediction(PredictInt32, DynamicPrediction));
&gt; 
&gt; If I understand this correctly, the value &apos;DynamicPrediction&apos; seems to be being used here to cover two different types of static predictions.
&gt; In the case of bitops &amp; valuetoint32, we can statically infer with absolute certainty that the result is an int32.
&gt; In the case of ArithMod &amp; UInt32ToNumber I guess you are assuming the results are highly likely to be int32, and as such want to give a string prediction rather than a weak one, despite this being static &amp; not dynamic?
&gt; 
&gt; If so, I&apos;d suggest adding a couple of new enum values, say StrongStaticPrediction &amp; StaticInference.  You could make their values equal to DynamicPrediction such that they will currently be handled the same for now, but give us the option to change how these predictions are merged with each other in the future.

What about just renaming DynamicPrediction to StrongPrediction and StaticPrediction to WeakPrediction?  

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITCode.h:52
&gt; &gt; +        
&gt; 
&gt; It might be more helpful to have a separate type indicating the compilation kind.  Using the JITType here artificially makes a tie between a policy (tiered compilation), and a set of particular mechanisms (BaselineJIT, DFGJIT).  Using the same enum to select may make it more difficult to reconfigure this in the future.  E.g. should we want to use the non-spec path of the DFG-JIT with optimization hooks as our low tier JIT &amp; a speculating compile from the DFG-JIT exploiting value profiling.
&gt; 
&gt; In such a case, I guess we can just replace DFGJIT with two new enum entries, &amp; deal with working out in all cases whether DFGJIT checks were checking for top tier or the new compiler.  But we may regret not having an explicit type for the tiers.

There isn&apos;t a lot of code that relies on this enum.  So do we really need to future-proof this?

Right now we do indeed have a tie between mechanism and policy, because we&apos;re using the BaselineJIT as our bottom tier, and the DFGJIT for the top tier.  So to me it makes sense to have one enum for both policy and mechanism, does it not?

&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/Platform.h:978
&gt; &gt; +#endif
&gt; 
&gt; Slightly verbose set of config, &amp; requires two switches setting - could just make this:
&gt; 
&gt; #if !defined(ENABLE_VALUE_PROFILER)
&gt; #define ENABLE_VALUE_PROFILER ENABLE_TIERED_COMPILATION
&gt; #endif
&gt; #if !defined(ENABLE_DYNAMIC_OPTIMIZATION)
&gt; #define ENABLE_DYNAMIC_OPTIMIZATION ENABLE_TIERED_COMPILATION
&gt; #endif
&gt; 
&gt; So by default both follow the ENABLE_TIERED_COMPILATION setting.

+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462286</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 17:31:39 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:227
&gt; &gt; +        PassOwnPtr&lt;CodeBlock&gt; releaseAlternative() { return m_alternative.release(); }
&gt; 
&gt; I think the code could probably be refactored quite easily to remove releaseAlternative(), and I think it would be easier to follow if we did so.
&gt; 
&gt; The code currently sets the m_fooBarCodeBlock variables on Executables quite aggressively, and then has to reset this value if compilation fails.  Now this involves switching CodeBlocks &amp; switching back - I think it would be conceptually cleaner to just store the new code block in a local RefPtr, and assign across (releasing from the local) to the member only if compilation succeeds.

Just remembered why I did it this way: CodeBlock is not ref counted.  But do we really want to make it ref counted just for this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462290</commentid>
    <comment_count>32</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-05 17:47:20 -0700</bug_when>
    <thetext>&gt; Just remembered why I did it this way: CodeBlock is not ref counted.  But do we really want to make it ref counted just for this case?

Gah, sorry, meant OwnPtr rather than RefPtr.  I think the suggestion still stands? - code block could be a local OwnPtr, released &amp; assigned to the executable only if compilation is successful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462291</commentid>
    <comment_count>33</comment_count>
      <attachid>106369</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 17:49:31 -0700</bug_when>
    <thetext>Created attachment 106369
the patch - partial fix review

For the more subtle parts of the review I proceeded as follows.  For the last two bullets, I kept the code as-is, because AFAIK that&apos;s the lesser of the various evils right now.

branchAdd32 should use scratchRegister not r11:
    I renamed it to branchAdd32Absolute and moved it to the subclasses.

DynamicPrediction:
    I renamed DynamicPrediction to StrongPrediction and StaticPrediction to WeakPrediction.

setting m_fooBarCodeBlock before we know that optimizing will succeed:
    I kept this as-is, because CodeBlock is not ref-counted, and the CodeBlock::m_alternative pointer is an OwnPtr that needs to be initialized prior to compiling.  So we need a releaseAlternative() method, and we need to call this method in Executable.cpp in a number of places, if we want to back out of optimization.  We can either (1) make CodeBlock ref-counted just to satisfy this case and get rid of releaseAlternative(), or (2) keep it as-is.

JITType enum:
    I kept this as-is, because currently having two enums (policy and mechanism) would just mean having two enums that say the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462292</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 17:51:26 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; Just remembered why I did it this way: CodeBlock is not ref counted.  But do we really want to make it ref counted just for this case?
&gt; 
&gt; Gah, sorry, meant OwnPtr rather than RefPtr.  I think the suggestion still stands? - code block could be a local OwnPtr, released &amp; assigned to the executable only if compilation is successful.

But then we still need releaseAlternative().

We need CodeBlock::m_alternative to be set prior to invoking optimized compilation, because optimized compilation reads this field.

So if optimized compilation fails, we need releaseAlternative().  I know, it&apos;s nasty.  But that leaves us with these choices:

1) Leave it as-is.

2) Make CodeBlock ref-counted to satisfy this case.

3) Don&apos;t set m_fooBarCodeBlock, but still release() it, prior to optimized compilation.  That might make the code make a bit more sense, but it wouldn&apos;t be too different from what I have right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462294</commentid>
    <comment_count>35</comment_count>
      <attachid>106369</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-05 18:05:38 -0700</bug_when>
    <thetext>Comment on attachment 106369
the patch - partial fix review

Attachment 106369 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9592670</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462296</commentid>
    <comment_count>36</comment_count>
      <attachid>106370</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 18:07:39 -0700</bug_when>
    <thetext>Created attachment 106370
the patch - partial fix review, fix Qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462337</commentid>
    <comment_count>37</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-05 20:51:13 -0700</bug_when>
    <thetext>&gt; branchAdd32 should use scratchRegister not r11:
&gt;     I renamed it to branchAdd32Absolute and moved it to the subclasses.

You forgot to remove branchAdd32 from MacroAssemblerX86Common.h!
Also branchAdd32Absolute should be named branchAdd32, other AbsoluteAddress&apos;ed methods aren&apos;t named in this fashion.

I&apos;m fine with the other changes / review push-back, r+ with MacroAssemblerX86Common::branchAdd32 removed, branchAdd32Absolute renamed to branchAdd32.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462344</commentid>
    <comment_count>38</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 21:09:18 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; &gt; branchAdd32 should use scratchRegister not r11:
&gt; &gt;     I renamed it to branchAdd32Absolute and moved it to the subclasses.
&gt; 
&gt; You forgot to remove branchAdd32 from MacroAssemblerX86Common.h!
&gt; Also branchAdd32Absolute should be named branchAdd32, other AbsoluteAddress&apos;ed methods aren&apos;t named in this fashion.

If I rename it to branchAdd32() then I get overload hiding madness.  If I just change the name to branchAdd32() but leave it in the subclasses, I get the following errors for uses of the other branchAdd32() overloads:

/Volumes/Data/pizlo/quartary/OpenSource/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:686:102:{686:34-686:51}{686:102-686:114}: error: too many arguments to function call, expected 3, have 4 [2]
                 speculationCheck(m_jit.branchAdd32(MacroAssembler::Overflow, op2.gpr(), Imm32(imm1), result.gpr()));
                                  ~~~~~~~~~~~~~~~~~                                                   ^~~~~~~~~~~~

Notice that here we&apos;re trying to call MacroAssemblerX86Common::branchAdd32(ResultCondition, RegisterID, TrustedImm32, RegisterID).  But the compiler assumes that MacroAssemblerX86_64::branchAdd32(ResultCondition, RegisterID, AbsoluteAddress) is hiding that method, along with the other overloads.  This is because C++ apparently dictates that name resolution is done before overload resolution, so as soon as MacroAssemblerX86_64::branchAdd32 is found, none of the overloads of MacroAssemblerX86Common::branchAdd32are visible.

&gt; I&apos;m fine with the other changes / review push-back, r+ with MacroAssemblerX86Common::branchAdd32 removed, branchAdd32Absolute renamed to branchAdd32.

OK, what would you prefer? :-)  Once again, the options are:

1) Do as I did before.  Move branchAdd32Absolute to MacroAssemblerX86Common, but then I have to use r11 directly instead of via the scratchRegister alias.

2) As with (1) but move the scratchRegister declaration to MacroAssemblerX86Common.

3) Move all branchAdd32 overloads to the MacroAssemblerX86_64 and MacroAssemblerX86.  I don&apos;t like this option because that&apos;s a lot of code duplication.

4) Rename this particular overload of branchAdd32 to branchAdd32Absolute and put it in MacroAssemblerX86_64, which is what I had done for this patch.

I tend to think that (4) is the lesser of the various evils, though I&apos;m happy with any of the other approaches.  I&apos;m not trying to advocate styles here ... I totally agree that branchAdd32Absolute &quot;should&quot; be called branchAdd32, and that we &quot;should&quot; refer to scratchRegister instead of directly to r11, but we&apos;re pushing up against bizarre corner cases of C++ here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462350</commentid>
    <comment_count>39</comment_count>
      <attachid>106384</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 21:16:27 -0700</bug_when>
    <thetext>Created attachment 106384
the patch - more fix review, sort of

This removes branchAdd32 from MacroAssembler86Common, but still calls the absolute one branchAdd32Absolute due to C++ overload hiding rules.  I&apos;m happy to use some other strategy to get around the overload hiding ... this was just the one I thought was least evil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462378</commentid>
    <comment_count>40</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-05 23:32:18 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=106384) [details]
&gt; the patch - more fix review, sort of
&gt; 
&gt; This removes branchAdd32 from MacroAssembler86Common, but still calls the absolute one branchAdd32Absolute due to C++ overload hiding rules.  I&apos;m happy to use some other strategy to get around the overload hiding ... this was just the one I thought was least evil.

Ah! - I see - you just need to add a using directive in the MacroAssemblerX86/MacroAssemblerX86_64 classes:
    using MacroAssemblerX86Common::branchAdd32;

You should see a bunch of them at these head of these classes already, around lines 45-55 of both files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462379</commentid>
    <comment_count>41</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 23:40:31 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; Created an attachment (id=106384) [details] [details]
&gt; &gt; the patch - more fix review, sort of
&gt; &gt; 
&gt; &gt; This removes branchAdd32 from MacroAssembler86Common, but still calls the absolute one branchAdd32Absolute due to C++ overload hiding rules.  I&apos;m happy to use some other strategy to get around the overload hiding ... this was just the one I thought was least evil.
&gt; 
&gt; Ah! - I see - you just need to add a using directive in the MacroAssemblerX86/MacroAssemblerX86_64 classes:
&gt;     using MacroAssemblerX86Common::branchAdd32;
&gt; 
&gt; You should see a bunch of them at these head of these classes already, around lines 45-55 of both files.

Ah, that&apos;s pretty cool.  I didn&apos;t know using was that powerful! :-)  OK, I&apos;ve fixed this and will commit with this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462383</commentid>
    <comment_count>42</comment_count>
      <attachid>106393</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-05 23:45:00 -0700</bug_when>
    <thetext>Created attachment 106393
the patch

Will run a final batch of tests and then cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462387</commentid>
    <comment_count>43</comment_count>
      <attachid>106393</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-06 00:02:08 -0700</bug_when>
    <thetext>Comment on attachment 106393
the patch

preemptive r+ pending cq+ on your testing :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462432</commentid>
    <comment_count>44</comment_count>
      <attachid>106393</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 02:23:04 -0700</bug_when>
    <thetext>Comment on attachment 106393
the patch

Clearing flags on attachment: 106393

Committed r94559: &lt;http://trac.webkit.org/changeset/94559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462433</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 02:23:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105564</attachid>
            <date>2011-08-29 19:43:10 -0700</date>
            <delta_ts>2011-08-29 20:04:05 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>tiering_patch_1.diff</filename>
            <type>text/plain</type>
            <size>68299</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQwNDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE0IEBA
CisyMDExLTA4LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCB0aGUg
bm90aW9uIHRoYXQgYW4gZXhlY3V0YWJsZSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIENvZGVCbG9j
aworICAgICAgICBmb3IgYSBwYXJ0aWN1bGFyIHJvbGUuIENvZGVCbG9ja3MgZm9ybSBsaW5rZWQg
bGlzdHMsIG9yZGVyZWQgaW4KKyAgICAgICAgZGVzY2VuZGluZyB0ZWFyIChzbyBpZiB0aGUgY29k
ZSBpcyBvcHRpbWl6ZWQsIHRoZSBmaXJzdCBDb2RlQmxvY2sKKyAgICAgICAgd2lsbCBiZSBERkcg
YW5kIHRoZSBzZWNvbmQgd2lsbCBiZSB0aGUgb2xkIEpJVCkuIFRoZSBvbGQgSklUIGhhcworICAg
ICAgICBleGVjdXRpb24gY291bnRlcnMgZm9yIGVhY2ggQ29kZUJsb2NrLCB3aGljaCBkZWNpZGUg
d2hlbiB0byB0aWVyIHVwLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbGwgZGlzYWJsZWQg
YnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIG5vdCB5ZXQgYSBwZXJmb3JtYW5jZQorICAgICAgICB3
aW4uICBXaGVuIGRpc2FibGVkIGl0IGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xl
YXJFdmFsQ2FjaGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhpc3RpbmdFbnRyaWVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSk6CisgICAgICAg
IChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9j
azo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxl
T3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjphbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVsZWFzZUFsdGVybmF0
aXZlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNJbmNvbWluZ0NhbGxzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRKSVRDb2Rl
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRKSVRUeXBlKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6R2xvYmFs
Q29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJs
b2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZh
bENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNv
ZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcv
REZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5r
KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZn
TGlua0Zvcik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VGltZW91dENoZWNr
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6bGlua0Zvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAg
ICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Ym90dG9t
VGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OnRvcFRpZXJKSVQpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpuZXh0VGllckpJVCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGppdC9KSVRT
dHVicy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZU9wdGltaXplZEZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yKToKKyAgICAgICAgKiB3dGYv
RG91Ymx5TGlua2VkU2VudGluZWxMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpEb3VibHlM
aW5rZWRTZW50aW5lbExpc3ROb2RlOjppc09uTGlzdCk6CisgICAgICAgIChXVEY6Ojo6RG91Ymx5
TGlua2VkU2VudGluZWxMaXN0Tm9kZSk6CisgICAgICAgIChXVEY6Ojo6c2V0UHJldik6CisgICAg
ICAgIChXVEY6Ojo6c2V0TmV4dCk6CisgICAgICAgIChXVEY6Ojo6cHJldik6CisgICAgICAgIChX
VEY6Ojo6bmV4dCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Ojph
cHBlbmQpOgorICAgICAgICAoV1RGOjo6OnByZXBlbmQpOgorICAgICAgICAoV1RGOjpEb3VibHlM
aW5rZWRTZW50aW5lbExpc3Q6OmhlYWRTZW50aW5lbCk6CisgICAgICAgIChXVEY6OkRvdWJseUxp
bmtlZFNlbnRpbmVsTGlzdDo6dGFpbFNlbnRpbmVsKToKKyAgICAgICAgKFdURjo6OjpEb3VibHlM
aW5rZWRTZW50aW5lbExpc3QpOgorICAgICAgICAoV1RGOjo6OmlzRW1wdHkpOgorICAgICAgICAo
V1RGOjo6OnNpemUpOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Ojpo
ZWFkKToKKyAgICAgICAgKFdURjo6OjpyZW1vdmVIZWFkKToKKyAgICAgICAgKiB3dGYvUGxhdGZv
cm0uaDoKKwogMjAxMS0wOC0yOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVuemlwIGluaXRpYWxpemF0aW9uIGxpc3RzIGFuZCBjb25zdHJ1Y3Rv
cnMgaW4gSlNDZWxsIGhpZXJhcmNoeSAoMy83KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEw
ICs1MiwxMSBAQAogCQkwRjc3MDA5MDE0MDJGREU0MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4
RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5
IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmNwcCAqLzsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYx
M0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDODE1MTYxNDA1
MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFi
bGVTcGVjdHJ1bS5jcHAgKi87IH07CiAJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgx
NTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA4MTQwNDNCQ0EwMENG
QTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsgfTsKKwkJMEZDODE1MTUxNDA1MTE5
QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTIxNDA1MTE4NjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsKKwkJMEZEMzM3NzQxNDBBRUM5MTAw
N0M3MDA3IC8qIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMzM3NzIxNDBBRUM4MjAwN0M3MDA3IC8qIERv
dWJseUxpbmtlZFNlbnRpbmVsTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2
NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8q
IE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXgu
Y3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBw
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
ODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAg
LTczOSwxMCArNzQwLDExIEBACiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGlu
Z0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3Vu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZU
YWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQw
NDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJp
ZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzgxNTEyMTQwNTEx
ODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzMzc3MjE0MEFFQzgyMDA3QzcwMDcgLyogRG91Ymx5TGlu
a2VkU2VudGluZWxMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvdWJs
eUxpbmtlZFNlbnRpbmVsTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAw
MDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBK
U0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzAsNiArMTY3Miw3IEBA
CiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDMzNzcyMTQwQUVDODIwMDdDNzAwNyAvKiBE
b3VibHlMaW5rZWRTZW50aW5lbExpc3QuaCAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3
NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLAog
CQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICovLApAQCAtMjI1MSw2ICsy
MjU0LDcgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBB
cnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzMzc3NDE0MEFFQzkxMDA3
QzcwMDcgLyogRG91Ymx5TGlua2VkU2VudGluZWxMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDk0
MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEsMTcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7
CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1
c3RlZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworI2lmIENQVShYODZf
NjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgWDg2UmVnaXN0ZXJz
OjpyMTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyMTEpKTsK
KyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRlc3QubV9w
dHIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25k
aXRpb24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAg
YWRkMzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDkgKzE0MDEs
MTAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1Db2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVU
eXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1i
b2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCitDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBK
U0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFi
LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkK
ICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4
ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291bnRlcigtMTApCiAgICAgLCBtX251
bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFt
ZXRlcnMoMCkKQEAgLTE0MjIsNiArMTQyMyw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9z
b3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCisg
ICAgLCBtX2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQogewogICAgIEFTU0VSVChtX3NvdXJjZSk7
CiAKQEAgLTE0NDgsNiArMTQ1MCwxNSBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgICAg
ICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkNlbGwoKSk7CiAgICAgfQogI2VuZGlmCisg
ICAgCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0aGVyZSBh
cmUgaW5jb21pbmcgY2FsbHMuICBCdXQKKyAgICAvLyBpZiB0aGlzIGlzIGNhbGxlZCBkdXJpbmcg
aGVhcCBkZXN0cnVjdGlvbiwgdGhlbiBmb3IgY29uc2lzdGVuY3kncyBzYWtlCisgICAgLy8gd2Ug
bWFrZSBzdXJlIHRoYXQgb3VyIGluY29taW5nIGNhbGxzIGFyZSBub3Qgb24gb3VyIGxpc3QuCisg
ICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5yZW1vdmVIZWFkKCkpIHsgfQorICAgIAorICAgIC8v
IE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1vdmVkIGZyb20gb3RoZXIg
Q29kZUJsb2NrcycKKyAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2VkIGxpc3RzIHRocm91Z2gg
dGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbworICAgIC8vIGRlc3RydWN0b3JzLgog
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHVi
SW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKQEAgLTE1MTUsNiArMTUyNiw4IEBA
IHZvaWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFYKIAogdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIGlmICghIW1f
YWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKICAgICBpZiAobV9yYXJlRGF0YSkgewpAQCAtMTcy
Nyw4ICsxNzQwLDMwIEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmEK
IH0KICAgICAKICNpZiBFTkFCTEUoSklUKQordm9pZCBDYWxsTGlua0luZm86OnVubGluayhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit7Cisg
ICAgQVNTRVJUKGlzTGlua2VkKCkpOworICAgIAorICAgIGlmIChpc0RGRykgeworI2lmIEVOQUJM
RShERkdfSklUKQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxs
KGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0
aW9uTGlua0NvbnN0cnVjdCk7CisjZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGw/IGdsb2JhbERhdGEuaml0
U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmly
dHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsK
KyAgICBjYWxsZWUuY2xlYXIoKTsKKworICAgIC8vIEl0IHdpbGwgYmUgb24gYSBsaXN0IGlmIHRo
ZSBjYWxsZWUgaGFzIGEgY29kZSBibG9jay4KKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAg
cmVtb3ZlKCk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7CisgICAgaWYg
KCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dW5saW5rQ2FsbHMoKTsK
ICAgICBpZiAoIShtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpIHx8IG1fbWV0aG9kQ2FsbExpbmtJbmZv
cy5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2dsb2JhbERhdGEtPmNhblVz
ZUpJVCgpKQpAQCAtMTczNywyNCArMTc3Miw4OSBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2Fs
bHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9zLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6REZHSklUKSB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxs
UmV0dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5mb3NbaV0uaXNDYWxsID8gb3BlcmF0aW9uTGlu
a0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKLSNlbHNlCi0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKG1fY2FsbExpbmtJbmZvc1tp
XS5jYWxsUmV0dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5mb3NbaV0uaXNDYWxsID8gbV9nbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkgOiBtX2dsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpKTsKLSAgICAgICAgbV9jYWxsTGlua0lu
Zm9zW2ldLnVubGluaygpOworICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCptX2ds
b2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOwogICAgIH0KIH0KKwordm9pZCBDb2RlQmxvY2s6OnVu
bGlua0luY29taW5nQ2FsbHMoKQoreworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0
aGlzKTsKKyAgICB3aGlsZSAoQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9pbmNvbWluZ0NhbGxzLnJl
bW92ZUhlYWQoKSkKKyAgICAgICAgaW5mby0+dW5saW5rKCptX2dsb2JhbERhdGEsIHJlcGF0Y2hC
dWZmZXIpOworfQogI2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpjbGVhckV2YWxDYWNoZSgpCiB7
CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+Y2xlYXJF
dmFsQ2FjaGUoKTsKICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVybjsKICAgICBt
X3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUuY2xlYXIoKTsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2lubGluZSB2b2lkIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMoVmVjdG9yPFQ+JiB0YXJn
ZXQsIFZlY3RvcjxUPiYgc291cmNlKQoreworICAgIEFTU0VSVCh0YXJnZXQuc2l6ZSgpIDw9IHNv
dXJjZS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0LnNpemUoKTsg
KytpKQorICAgICAgICB0YXJnZXRbaV0gPSBzb3VyY2VbaV07Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
Ojpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpCit7CisgICAgaWYgKCFtX2FsdGVybmF0aXZlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2NvbnN0
YW50UmVnaXN0ZXJzLCBtX2FsdGVybmF0aXZlLT5tX2NvbnN0YW50UmVnaXN0ZXJzKTsKKyAgICBy
ZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVuY3Rpb25EZWNscywgbV9hbHRlcm5hdGl2ZS0+bV9m
dW5jdGlvbkRlY2xzKTsKKyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVuY3Rpb25FeHBy
cywgbV9hbHRlcm5hdGl2ZS0+bV9mdW5jdGlvbkV4cHJzKTsKK30KKworLy8gRklYTUU6IEltcGxl
bWVudCBPU1IuICBJZiBjb21waWxlT3B0aW1pemVkKCkgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJl
IG90aGVyIHRoYW4gdGhlCisvLyBlcGlsb2d1ZSwgZG8gT1NSIGZyb20gdGhlIG9sZCBjb2RlIGJs
b2NrIHRvIHRoZSBuZXcgb25lLgorCisvLyBGSVhNRTogQWZ0ZXIgZG9pbmcgc3VjY2Vzc2Z1bCBv
cHRpbWl6ZWQgY29tcGlsYXRpb24sIHJlc2V0IHRoZSBwcm9maWxpbmcgY291bnRlciB0byAtMSwg
c28KKy8vIHRoYXQgdGhlIG5leHQgZXhlY3V0aW9uIG9mIHRoZSBvbGQgY29kZSBibG9jayB3aWxs
IGp1bXAgc3RyYWlnaHQgaW50byBjb21waWxlT3B0aW1pemVkKCkKKy8vIGFuZCBwZXJmb3JtIE9T
Ui4KKworLy8gRklYTUU6IEVuc3VyZSB0aGF0IGEgY2FsbCB0byBjb21waWxlT3B0aW1pemVkKCkg
anVzdCBkb2VzIE9TUiAoYW5kIHJlc2V0cyB0aGUgY291bnRlciB0byAtMSkKKy8vIGlmIHRoZSBj
b2RlIGhhZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQuCisKK0NvZGVCbG9jayogUHJvZ3JhbUNvZGVC
bG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4
ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisK
K0NvZGVCbG9jayogRXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAm
c3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRl
ZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2Vt
ZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IobV9pc0NvbnN0cnVjdG9yID8g
Q29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KKworSlNPYmplY3QqIFByb2dyYW1D
b2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUo
KSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1
dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworfQorCitK
U09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFjZW1lbnQo
KS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUoKSkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+
KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9k
ZSk7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBp
ZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdl
dEpJVFR5cGUoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWRG
b3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1
Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRl
ICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSA8d3RmL0Rv
dWJseUxpbmtlZFNlbnRpbmVsTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBA
IC05NywxMiArOTgsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShK
SVQpCi0gICAgc3RydWN0IENhbGxMaW5rSW5mbyB7CisgICAgc3RydWN0IENhbGxMaW5rSW5mbzog
cHVibGljIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAg
ICAgIENhbGxMaW5rSW5mbygpCiAgICAgICAgICAgICA6IGhhc1NlZW5TaG91bGRSZXBhdGNoKGZh
bHNlKQogICAgICAgICAgICAgLCBpc0NhbGwoZmFsc2UpCisgICAgICAgICAgICAsIGlzREZHKGZh
bHNlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5DYWxsTGlua0lu
Zm8oKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgICAg
ICAgICByZW1vdmUoKTsKKyAgICAgICAgfQogCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNh
bGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwgb3Ig
YSBub3JtYWwgY2FsbCBpbiBERkcKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGhv
dFBhdGhCZWdpbjsKQEAgLTExMCwxMyArMTE4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwogICAgICAgICBib29sIGhhc1Nl
ZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICAgICAgYm9vbCBpc0NhbGwgOiAxOworICAgICAgICBi
b29sIGlzREZHIDogMTsKIAogICAgICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gY2FsbGVl
OyB9Ci0gICAgICAgIHZvaWQgdW5saW5rKCkKLSAgICAgICAgewotICAgICAgICAgICAgaGFzU2Vl
blNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgIGNhbGxlZS5jbGVhcigpOwotICAg
ICAgICB9CisgICAgICAgIHZvaWQgdW5saW5rKEpTR2xvYmFsRGF0YSYsIFJlcGF0Y2hCdWZmZXIm
KTsKIAogICAgICAgICBib29sIHNlZW5PbmNlKCkKICAgICAgICAgewpAQCAtMjA5LDEzICsyMTQs
MTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFs
T2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBib29sIGlzQ29uc3RydWN0b3IpOworICAgICAg
ICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIGJvb2wgaXNDb25zdHJ1Y3Rvciwg
UGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKTsKIAogICAgICAgICBXcml0ZUJhcnJp
ZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBIZWFwKiBtX2hlYXA7
CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNvZGVCbG9jaygpOworICAgICAgICAK
KyAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUu
Z2V0KCk7IH0KKyAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRlcm5hdGl2
ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAKICAgICAgICAgdm9pZCB2
aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCkBAIC0yNzcsNiArMjg1LDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBoYXNJbmNvbWluZ0NhbGxzKCkgeyByZXR1cm4gIW1faW5jb21p
bmdDYWxscy5pc0VtcHR5KCk7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgbGlua0luY29taW5n
Q2FsbChDYWxsTGlua0luZm8qIGluY29taW5nKQorICAgICAgICB7CisgICAgICAgICAgICBtX2lu
Y29taW5nQ2FsbHMuYXBwZW5kKGluY29taW5nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlRF
UlBSRVRFUikKQEAgLTI5OCw4ICszMTUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBt
X2lzQ29uc3RydWN0b3IgPyBvd25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNv
bnN0cnVjdCgpIDogb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCk7
IH0KKyAgICAgICAgdm9pZCBzZXRKSVRDb2RlKGNvbnN0IEpJVENvZGUmIGNvZGUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1faml0Q29kZSA9IGNvZGU7CisgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9
IGNvZGVXaXRoQXJpdHlDaGVjazsKKyAgICAgICAgfQorICAgICAgICBKSVRDb2RlJiBnZXRKSVRD
b2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0
SklUVHlwZSgpIHsgcmV0dXJuIG1faml0Q29kZS5qaXRUeXBlKCk7IH0KICAgICAgICAgRXhlY3V0
YWJsZVBvb2wqIGV4ZWN1dGFibGVQb29sKCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1
dGFibGVQb29sKCk7IH0KKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopID0gMDsKKyAgICAgICAgdmlydHVhbCBDb2Rl
QmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOworI2Vsc2UKKyAgICAgICAgSklUQ29kZTo6SklUVHlw
ZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gSklUQ29kZTo6QmFzZWxpbmVKSVQ7IH0KICNlbmRpZgog
CiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC01MzMsNiArNTYwLDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyBjcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2Fj
aGU7IH0KIAogICAgICAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgICAgIAorICAgICAgICB2
b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIG9w
dGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVD
b3VudGVyID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgbV9leGVj
dXRlQ291bnRlcjsKIAogICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVt
YmVycyBwcml2YXRlLgogCkBAIC01OTIsNiArNjI4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZlY3RvcjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5mb3M7CiAgICAg
ICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgVmVjdG9y
PE1ldGhvZENhbGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9zOworICAgICAgICBKSVRD
b2RlIG1faml0Q29kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZVdp
dGhBcml0eUNoZWNrOworICAgICAgICBEb3VibHlMaW5rZWRTZW50aW5lbExpc3Q8Q2FsbExpbmtJ
bmZvPiBtX2luY29taW5nQ2FsbHM7CiAjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxl
czsKQEAgLTYwOCw2ICs2NDcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1ib2xU
YWJsZSogbV9zeW1ib2xUYWJsZTsKIAorICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVy
bmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisKICAgICAgICAgc3RydWN0
IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAg
IHB1YmxpYzoKQEAgLTY0NCw5ICs2ODUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyByZXNw
b25zaWJsZSBmb3IgbWFya2luZyBpdC4KIAogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1
YmxpYyBDb2RlQmxvY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpCi0gICAgICAgICAgICA6IENvZGVCbG9j
ayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVy
LCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlKQorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAg
IDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291
cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFsc2Us
IGFsdGVybmF0aXZlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjU2LDE2ICs2OTcsMjIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGlj
IEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGljOgotICAgICAgICBQcm9ncmFtQ29kZUJsb2Nr
KFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlcikKLSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0
YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAgICAg
IFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29k
ZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0
ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUs
IGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkK
ICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOworI2VuZGlmCiAgICAgfTsKIAogICAgIGNsYXNzIEV2YWxDb2RlQmxvY2sgOiBw
dWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV2YWxDb2RlQmxv
Y2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBi
YXNlU2NvcGVEZXB0aCkKLSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0
YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAgICAg
IEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJv
dmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0
aXZlKQorICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBFdmFs
Q29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAg
ICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoYmFzZVNjb3BlRGVwdGgpCiAgICAgICAgIHsKICAg
ICAgICAgfQpAQCAtNjc5LDYgKzcyNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgbV92YXJpYWJsZXMu
c3dhcCh2YXJpYWJsZXMpOwogICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2Nr
KiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9i
YXNlU2NvcGVEZXB0aDsKQEAgLTY5MSwxNCArNzQ0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyBhcyB3ZSBuZWVkIHRvIGluaXRpYWxpc2UgdGhlIENvZGVCbG9jayBiZWZvcmUgd2Ug
Y291bGQgaW5pdGlhbGlzZSBhbnkgUmVmUHRyIHRvIGhvbGQgdGhlIHNoYXJlZAogICAgICAgICAv
LyBzeW1ib2wgdGFibGUsIHNvIHdlIGp1c3QgcGFzcyBhcyBhIHJhdyBwb2ludGVyIHdpdGggYSBy
ZWYgY291bnQgb2YgMS4gIFdlIHRoZW4gbWFudWFsbHkgZGVyZWYKICAgICAgICAgLy8gaW4gdGhl
IGRlc3RydWN0b3IuCi0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVu
c2lnbmVkIHNvdXJjZU9mZnNldCwgYm9vbCBpc0NvbnN0cnVjdG9yKQotICAgICAgICAgICAgOiBD
b2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0LCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCkubGVha1Jl
ZigpLCBpc0NvbnN0cnVjdG9yKQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0
cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJF
eGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNl
T2Zmc2V0LCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCkubGVha1JlZigpLCBpc0NvbnN0cnVj
dG9yLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIH5GdW5jdGlv
bkNvZGVCbG9jaygpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxlKCkt
PmRlcmVmKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50KCk7CisjZW5kaWYKICAgICB9OwogCiAgICAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3Rh
dGU6OnIoaW50IGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk0MDM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjpwcmVzZXJ2ZUxhc3RWYXIoCiAgICAgICAgIG1fbGFzdFZhciA9ICZtX2NhbGxlZVJlZ2lz
dGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQ
cm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaykKK0J5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFBy
b2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2lu
ZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0
LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4t
Pmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2hvdWxkRW1pdFJp
Y2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNSaWNoU291cmNl
SW5mbygpKQpAQCAtMjI4LDYgKzIyOCw5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihQcm8KICAgICAKICAgICBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID0gMTsg
Ly8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogICAgIGNvZGVCbG9jay0+bV9udW1DYXB0dXJl
ZFZhcnMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICAKKyAgICBpZiAoY29tcGlsYXRpb25L
aW5kID09IE9wdGltaXppbmdDb21waWxhdGlvbikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQo
KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAg
LTI1OCw3ICsyNjEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJv
CiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rp
b25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0J5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHks
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAsIG1f
c2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRz
UHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWlu
LT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKQEAgLTQxOSw3ICs0MjIs
NyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAgICAgfQogfQog
Ci1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2Rl
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBF
dmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0
aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3Bl
Q2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2hvdWxk
RW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNSaWNo
U291cmNlSW5mbygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTQwMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDkgKzkyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1w
c0dlbmVyYXRlZENvZGUpOwogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUo
KTsKIAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5O
b2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxl
KiwgQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgU2Nv
cGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqKTsKKyAgICAgICAgZW51
bSBDb21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRp
b24gfTsKKyAgICAgICAgCisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwg
U2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sqLCBDb21waWxh
dGlvbktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwg
U2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uS2lu
ZCk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgU2NvcGVDaGFpbk5vZGUq
LCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwogCiAgICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0
YTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNv
bnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXM7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDAz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDUsNiArOTA1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNh
bGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9pc0Nh
bGw7CisgICAgICAgIGluZm8uaXNERkcgPSB0cnVlOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2Fs
bHNbaV0ubV9zbG93Q2FsbCkpOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5m
by5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNb
aV0ubV9mYXN0Q2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0
Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5jcHAJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw5IEBAIHZvaWQgZGZnTGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0lu
Zm8uaXNMaW5rZWQoKSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNh
bGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2Fs
bGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0cik7CisgICAg
ICAgIAorICAgICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICAgICAgY2FsbGVlQ29k
ZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKCZjYWxsTGlua0luZm8pOwogICAgIH0KICAgICAKICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gOTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDE2IEBAIEpJVDo6SklUKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgQ29kZUIKIHsKIH0KIAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJ
T04pCit2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2lu
ZCBraW5kKQoreworICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoTm9uWmVybywg
VHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJm1fY29kZUJsb2NrLT5tX2V4ZWN1dGVD
b3VudGVyKSk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywga2luZCA9PSBMb29wT3B0
aW1pemF0aW9uQ2hlY2sgPyBjdGlfb3B0aW1pemVfZnJvbV9sb29wIDogY3RpX29wdGltaXplX2Zy
b21fcmV0KTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgc2tpcE9wdGltaXplLmxpbmsodGhp
cyk7Cit9CisjZW5kaWYKKwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiB2b2lkIEpJVDo6ZW1pdFRp
bWVvdXRDaGVjaygpCiB7CkBAIC0xMDIsNiArMTEyLDggQEAgdm9pZCBKSVQ6OmVtaXRUaW1lb3V0
Q2hlY2soKQogICAgIHN0dWJDYWxsLmNhbGwodGltZW91dENoZWNrUmVnaXN0ZXIpOwogICAgIHN0
dWJDYWxsLmdldEFyZ3VtZW50KDAsIHJlZ1QxLCByZWdUMCk7IC8vIHJlbG9hZCBsYXN0IHJlc3Vs
dCByZWdpc3RlcnMuCiAgICAgc2tpcFRpbWVvdXQubGluayh0aGlzKTsKKyAgICAKKyAgICBlbWl0
T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKIH0KICNlbHNlCiB2b2lk
IEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCkBAIC0xMTEsNiArMTIzLDggQEAgdm9pZCBKSVQ6OmVt
aXRUaW1lb3V0Q2hlY2soKQogICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7CiAKICAgICBraWxs
TGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisgICAgCisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExv
b3BPcHRpbWl6YXRpb25DaGVjayk7CiB9CiAjZW5kaWYKIApAQCAtNjIzLDcgKzYzNyw3IEBAIEpJ
VENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIAogICAgIGlmIChtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hl
Y2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YoYXJpdHlDaGVjayk7Ci0KKyAgICAKICAgICByZXR1cm4gSklUQ29kZShwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogfQogCkBAIC02MzcsNiAr
NjUxLDkgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDbwogICAgICAg
ICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7CiAgICAgICAgIGNhbGxMaW5rSW5m
by0+Y2FsbGVlLnNldCgqZ2xvYmFsRGF0YSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLCBjb2RlKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgICAgICBjYWxsZWVDb2Rl
QmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbExpbmtJbmZvKTsKICAgICB9CiAKICAgICAvLyBw
YXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtOTcyLDYgKzk3MiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gTG9hZHMgdGhlIGNoYXJhY3RlciB2YWx1ZSBvZiBh
IHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nIGludG8gZHN0LgogICAgICAgICB2b2lkIGVtaXRMb2Fk
Q2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3Qm
IGZhaWx1cmVzKTsKICAgICAgICAgCisgICAgICAgIGVudW0gT3B0aW1pemF0aW9uQ2hlY2tLaW5k
IHsgTG9vcE9wdGltaXphdGlvbkNoZWNrLCBSZXRPcHRpbWl6YXRpb25DaGVjayB9OworI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNo
ZWNrKE9wdGltaXphdGlvbkNoZWNrS2luZCk7CisjZWxzZQorICAgICAgICB2b2lkIGVtaXRPcHRp
bWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25DaGVja0tpbmQpIHsgfQorI2VuZGlmCisgICAgICAg
IAogICAgICAgICB2b2lkIGVtaXRUaW1lb3V0Q2hlY2soKTsKICNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyh1bnNpZ25lZCBzcmMxLCB1bnNpZ25l
ZCBzcmMyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDggQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxWYXJhcmdzU2xvd0Nhc2UoSQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hl
Y2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKICAgICBlbWl0TG9hZChkc3QsIHJlZ1QxLCBy
ZWdUMCk7CkBAIC0xMTgsNiArMTIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0
aW9uKiBjdXJyZQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2so
UmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgdGhpc1JlZyA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCShyZXZpc2lvbiA5NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMyArMjcsNTAgQEAKICNkZWZpbmUgSklU
Q29kZV9oCiAKICNpZiBFTkFCTEUoSklUKQotCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2lu
Y2x1ZGUgIlByb2ZpbGVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFC
TEUoSklUKQogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBSZWdpc3RlckZpbGU7
CisjZW5kaWYKICAgICAKICAgICBjbGFzcyBKSVRDb2RlIHsKKyNpZiBFTkFCTEUoSklUKQogICAg
ICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOwogICAgICAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOworI2Vsc2UKKyAgICAgICAgSklUQ29k
ZSgpIHsgfQorI2VuZGlmCiAgICAgcHVibGljOgogICAgICAgICBlbnVtIEpJVFR5cGUgeyBIb3N0
Q2FsbFRodW5rLCBCYXNlbGluZUpJVCwgREZHSklUIH07Ci0KKyAgICAgICAgCisgICAgICAgIHN0
YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQoKQorICAgICAgICB7CisjaWYgRU5BQkxFKFRJRVJF
RF9DT01QSUxBVElPTikKKyAgICAgICAgICAgIHJldHVybiBCYXNlbGluZUpJVDsKKyNlbHNlCisg
ICAgICAgICAgICByZXR1cm4gREZHSklUOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBKSVRUeXBlIHRvcFRpZXJKSVQoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gREZHSklUOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSklU
VHlwZSBuZXh0VGllckpJVChKSVRUeXBlIGppdFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoaml0VHlwZSwgaml0VHlwZSA9PSBCYXNlbGluZUpJVCB8fCBqaXRUeXBl
ID09IERGR0pJVCk7CisgICAgICAgICAgICByZXR1cm4gREZHSklUOworICAgICAgICB9CisgICAg
ICAgIAorI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVENvZGUoKQogICAgICAgICB7CiAgICAg
ICAgIH0KQEAgLTUzLDcgKzgwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1f
aml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAg
ICAgYm9vbCBvcGVyYXRvciAhKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
ICFtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKQEAgLTEyNCwxMCArMTUxLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQ29kZVJlZiBtX3JlZjsKICAgICAgICAgSklUVHlw
ZSBtX2ppdFR5cGU7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICB9OwogCiB9OwogCiAjZW5k
aWYKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUyLDYgKzQ1Miw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhJbnMKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNr
KFJldE9wdGltaXphdGlvbkNoZWNrKTsKKyAgICAKICAgICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0
ZXIgIT0gcmVnVDEpOwogICAgIEFTU0VSVChyZWdUMSAhPSByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsK
ICAgICBBU1NFUlQocmV0dXJuVmFsdWVSZWdpc3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBA
IC00NzIsNiArNDc0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJy
ZQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1p
emF0aW9uQ2hlY2spOworICAgIAogICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdU
MSk7CiAgICAgQVNTRVJUKHJlZ1QxICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VS
VChyZXR1cm5WYWx1ZVJlZ2lzdGVyICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5NDAzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2
LDYgKzE4MTYsMzIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfY2hlY2tfaGFzXwog
ICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIAorREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3B0aW1pemVfZnJvbV9sb29wKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKKyAgICAKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJh
bWUuY2FsbEZyYW1lOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2Nv
cGVDaGFpbigpOworCisgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0
aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7CisgICAgaWYgKGVycm9yKQorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmcm9tIGxvb3Ag
ZmFpbGVkLlxuIik7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zy
b21fcmV0KQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICAK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworCisgICAgSlNP
YmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2Nv
cGVDaGFpbik7CisgICAgaWYgKGVycm9yKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5J
Tkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmcm9tIHJldCBmYWlsZWQuXG4iKTsKK30KKwogREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2luc3RhbmNlb2YpCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gOTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyMyw2ICs0MjMsOCBAQCBleHRl
cm4gIkMiIHsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZf
YXJndW1lbnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlf
b3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9p
ZCBKSVRfU1RVQiBjdGlfb3B0aW1pemVfZnJvbV9sb29wKFNUVUJfQVJHU19ERUNMQVJBVElPTik7
CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3B0aW1pemVfZnJvbV9yZXQoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3RpX29wX2NvbnN0cnVjdF9h
cml0eUNoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3Rp
X29wX2NhbGxfaml0Q29tcGlsZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk0MDM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MCw4ICsxNzAsMTggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlv
bkV4ZWN1dGFibGUoRQogICAgIGZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFt
ZSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CiB9CiAKK0pTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSkKK3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOworICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CisgICAgSlNPYmplY3QqIGVy
cm9yID0gMDsKKyAgICBpZiAobV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29k
ZTo6dG9wVGllckpJVCgpKQorICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBz
Y29wZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9ldmFsQ29kZUJsb2NrLT5nZXRK
SVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIHJldHVybiBl
cnJvcjsKK30KIAotSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCog
RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogewogICAg
IEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xODcsMjYgKzE5Nyw0MCBAQCBKU09iamVjdCogRXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFTU0VS
VCghbV9ldmFsQ29kZUJsb2NrKTsKLSAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcg
RXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNj
b3BlQ2hhaW5Ob2RlLT5sb2NhbERlcHRoKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0
KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZh
bENvZGVCbG9jay5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVC
bG9jayA9IG1fZXZhbENvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBt
X2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxP
YmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlQ2hhaW5Ob2RlLT5sb2NhbERlcHRoKCks
IHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5n
ZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9l
dmFsQ29kZUJsb2NrLmdldCgpLCAhIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IEJ5
dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRv
cjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+
Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9ldmFsQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgICAg
IG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9l
dmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGV2YWxOb2RlLT5k
ZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KIAogICAgIGV2
YWxOb2RlLT5kZXN0cm95RGF0YSgpOworICAgIG1fZXZhbENvZGVCbG9jay0+Y29weURhdGFGcm9t
QWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERh
dGEoKS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gdHJ5REZHQ29t
cGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwpOwotICAg
ICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7
CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRm
Z0NvbXBpbGVkID0gdHJ5REZHQ29tcGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1f
aml0Q29kZUZvckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpCisgICAgICAgICAgICBB
U1NFUlQoIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSB8fCAhbV9ldmFsQ29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5oYXNJbmNvbWluZ0NhbGxzKCkpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0aXZlIHBpZWNlIG9mIGNvZGUg
Y29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCwgc28gd2Ug
Y2FuIHNpbGVudGx5IGZhaWwuCisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VB
bHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5v
ZGUtPmdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIH0KICNpZiAh
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6
ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmRpc2Nh
cmRCeXRlY29kZSgpOwogI2VuZGlmCisgICAgICAgIG1fZXZhbENvZGVCbG9jay0+c2V0SklUQ29k
ZShtX2ppdENvZGVGb3JDYWxsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgfQogI2Vu
ZGlmCiAKQEAgLTI2NSwxMCArMjg5LDE5IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6
Y2hlY2tTeW50YXgKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCi1KU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSkKIHsKLSAgICBBU1NFUlQoIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgQVNTRVJUKGV4ZWMt
Pmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX3Byb2dy
YW1Db2RlQmxvY2spOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fcHJvZ3Jh
bUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAg
ICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6
Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNT
RVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAKK0pTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUp
Cit7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTI4MSwyNSAr
MzE0LDM5IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKIAogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2Jq
ZWN0LmdldCgpOwogICAgIAotICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQ
cm9ncmFtQ29kZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCku
cHJvdmlkZXIoKSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFk
b3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFp
bk5vZGUsICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5n
ZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fcHJv
Z3JhbUNvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX3Byb2dyYW1D
b2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2Rl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJl
bGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0
UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5v
ZGUsICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQo
KSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRv
cjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGls
YXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7
Ci0gICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAgICBtX3Byb2dyYW1D
b2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3Jh
bUNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBwcm9ncmFtTm9kZS0+
ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBw
cm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmNvcHlE
YXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5n
bG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRy
eURGR0NvbXBpbGUoZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JD
YWxsKTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxl
ZCA9IGZhbHNlOworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAg
ICAgICAgICBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGUoZXhlYywgbV9wcm9ncmFtQ29kZUJs
b2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7
CisgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAg
ICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5j
b21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcHJvZ3Jh
bUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNv
ZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFt
Q29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpj
b21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0
KCkpOworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlm
ICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAg
bV9wcm9ncmFtQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBt
X3Byb2dyYW1Db2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0zNDYsNyArMzkzLDI5IEBAIHZv
aWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiAgICAgQmFzZTo6Y2xlYXJDb2RlKCk7
CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJu
YWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNT
dGF0ZSogY2FsbGVlQXJnc0V4ZWMpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21w
aWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykKK3sKKyAgICBBU1NFUlQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fY29k
ZUJsb2NrRm9yQ2FsbCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBpZiAobV9jb2Rl
QmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAg
ICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNhbGwt
PmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAg
cmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlKQoreworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAg
IEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5n
ZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAgICBlcnJvciA9IGNv
bXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6
bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVFR5cGUoKSkpOworICAg
IEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9
CisKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0
ZSogY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBKU09i
amVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29w
ZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKQEAgLTM2MiwxMSArNDMxLDEyIEBAIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNT
RVJUKCFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IGFkb3B0
UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVj
dCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgZmFsc2UpKTsK
LSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0
ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9y
Q2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkpOworICAgIE93
blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9jb2RlQmxvY2tGb3JDYWxsLnJl
bGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgp
KSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IGFkb3B0
UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVj
dCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgZmFsc2UsIHBy
ZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRv
cj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBz
Y29wZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVC
bG9ja0ZvckNhbGwuZ2V0KCksICEhbV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpID8g
Qnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJh
dG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9y
LT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKKyAg
ICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNv
ZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDYWxsLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAg
ICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAg
fQpAQCAtMzc3LDE3ICs0NDcsMzAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZUZvcgogICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPnNoYXJlZFN5
bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOworICAgIG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBib29sIGRm
Z0NvbXBpbGVkID0gdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKGV4ZWMsIGNhbGxlZUFyZ3NFeGVjLCBt
X2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJv
b2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6
REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlRnVuY3Rpb24o
ZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2Rl
Rm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgaWYgKGRm
Z0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5h
dGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUo
KS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxv
Y2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAg
ICAgICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPnNoYXJlZFN5bWJvbFRh
YmxlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9i
YWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksICZtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2spOwotCisgICAgICAgIH0KICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAg
ICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmRpc2NhcmRCeXRlY29kZSgpOwogI2VuZGlmCisg
ICAgICAgIAorICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPnNldEpJVENvZGUobV9qaXRDb2Rl
Rm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKICAgICB9CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShjYWxsZWVBcmdzRXhlYyk7CkBAIC00MDcsOCArNDkwLDEwIEBAIEpT
T2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICByZXR1cm4gMDsKIH0K
IAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOworICAgIAogICAg
IEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwogICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIDAsIG1fc291cmNlLCBtX3BhcmFtZXRlcnMuZ2V0
KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsICZleGNl
cHRpb24pOwpAQCAtNDIzLDExICs1MDgsMTIgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZUZvcgogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3Bl
Q2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0KTsKLSAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IGFkb3B0UHRyKG5l
dyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291
cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgdHJ1ZSkpOwotICAgIE93
blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdl
bmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkpOworICAg
IE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21U
aWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2Rl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0
KCksIHRydWUsIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRl
Y29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihi
b2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnN5bWJv
bFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAhIW1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdD
b21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAg
IGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGJvZHktPmRlc3Ry
b3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQpAQCAtNDM4LDE0ICs1
MjQsMjkgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIG1f
c3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2hhcmVkU3ltYm9sVGFibGUo
KTsKIAogICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlm
IChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgbV9qaXRDb2RlRm9y
Q29uc3RydWN0ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrKTsKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICAvLyBG
SVhNRTogTWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIGNvbnN0cnVjdG9ycyB3aXRoIERGRy4K
KyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0
ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRh
YmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3QgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEs
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAmbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0
aEFyaXR5Q2hlY2spOworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAg
ICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAg
ICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRpc2NhcmRCeXRlY29kZSgpOwogI2Vu
ZGlmCisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2V0SklUQ29k
ZShtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMywxMCArMzAzLDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7
CiAgICAgICAgICAgICBpZiAoIW1fZXZhbENvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJv
ciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAg
ICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9ldmFs
Q29kZUJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpOwogCiAgICAgICAgIEV2YWxDb2RlQmxvY2sm
IGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewpAQCAtMzQwLDcgKzM0Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxh
Z3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUm
LCBib29sKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCB1bmxp
bmtDYWxscygpOwogCkBAIC0zNjQsMTEgKzM2NiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAg
ICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX3Byb2dy
YW1Db2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhl
Yywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVy
bmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAg
ICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fcHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgICAg
ICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSk7CisKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTM5OCw3
ICs0MDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFi
bGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5h
bChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGls
ZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAg
ICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIApAQCAtNDQzLDExICs0NDcsMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9i
YWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAg
IGlmICghbV9jb2RlQmxvY2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGls
ZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMpOwor
ICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29w
ZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAg
ICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICAg
ICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyA9IDApOworCiAgICAgICAgIGJv
b2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKQEAgLTQ2NCwxMSArNDcwLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFs
T2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBp
ZiAoIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQotICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAg
ICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZUNo
YWluTm9kZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAgICAgIEFTU0VSVCgh
ZXJyb3IgPT0gISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZv
ckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSk7CisKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKQEAgLTQ5
NCw2ICs1MDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gY29tcGls
ZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNvbXBpbGVPcHRpbWl6ZWRGb3Igc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBjYWxsZnJhbWUgc2V0IHVwIHRvIGNhbGwgdGhpcyBmdW5j
dGlvbiwKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgbWFrZSBzcGVjdWxhdGl2ZSBvcHRp
bWl6YXRpb25zIGJhc2VkIG9uIHRoZSBhcmd1bWVudHMuCisgICAgICAgICAgICBBU1NFUlQoZXhl
Yy0+Y2FsbGVlKCkpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhlcml0
cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CisgICAgICAgICAgICBBU1NFUlQoYXNGdW5jdGlvbihl
eGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29tcGlsZU9wdGltaXplZEZvckNhbGwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGV4ZWMpOwor
ICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAg
ICByZXR1cm4gY29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkKQEAgLTU0Miw4ICs1NjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNv
bnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgYm9vbCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNv
dXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwg
Ym9vbCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKIAotICAgICAgICBKU09iamVjdCog
Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNT
dGF0ZSogY2FsbGVlQXJnc0V4ZWMpOwotICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwg
RXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSk7CisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3Jp
cHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0
dXJlZFZhcmlhYmxlcyA6IDMxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Eb3Vi
bHlMaW5rZWRTZW50aW5lbExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0RvdWJseUxpbmtlZFNlbnRpbmVsTGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9Eb3VibHlMaW5rZWRTZW50aW5lbExpc3QuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERvdWJseUxpbmtlZFNl
bnRpbmVsTGlzdF9oCisjZGVmaW5lIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdF9oCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisvLyBBIGRvdWJseS1saW5rZWQgc2VudGluZWwgbGlz
dCBhbGxvd3MgZm9yIHRoZSByZW1vdmFsIG9mIGEgbm9kZSBkaXJlY3RseSwKKy8vIHdpdGhvdXQg
aGF2aW5nIGFueSBvdGhlciBwb2ludGVycyBpbnRvIHRoZSBsaXN0LiBJdCBhbHNvIHJlcXVpcmVz
IGZvdXIKKy8vIHdvcmRzLCByYXRoZXIgdGhhbiB0d28sIG9mIG92ZXJoZWFkIGluIHRoZSBEb3Vi
bHlMaW5rZWRTZW50aW5lbExpc3QKKy8vIHN0cnVjdHVyZS4gQWxzbyB1bmxpa2UgdGhlIERvdWJs
eUxpbmtlZExpc3QsIHRoZSBmb3JtYXQgb2YgbmV4dC9wcmV2CisvLyBsaW5rcyBpcyBwcmVkZXRl
cm1pbmVkIGluIHRoZSBEb3VibHlMaW5rZWRTZW50aW5lbExpc3ROb2RlIGNsYXNzLgorLy8gRmlu
YWxseSwgaXQgZGlmZmVycyBmcm9tIFNlbnRpbmVsTGlua2VkTGlzdCBieSBlbnN1cmluZyB0aGF0
IHRoZQorLy8gc2VudGluZWxzIG9ubHkgaGF2ZSBuZXh0L3ByZXYgcG9pbnRlcnMgaW5zdGVhZCBv
ZiB0aGUgZnVsbCBjb250ZW50cyBvZgorLy8gdGhlIG5vZGUgc3RydWN0dXJlLiBUaGlzIG1ha2Vz
IERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdCBncmVhdCBmb3IgY2FzZXMKKy8vIHdoZXJlIHRoZSBu
b2RlcyBhcmUgbGFyZ2UuCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGUgdGVtcGxhdGUgYXJn
dW1lbnQgVCBzaG91bGQgYmUgYSBzdWJjbGFzcyBvZiBEb3VibHlMaW5rZWRTZW50aW5lbExpc3RO
b2RlLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERvdWJseUxpbmtlZFNlbnRpbmVsTGlz
dE5vZGUgeworcHVibGljOgorICAgIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdE5vZGUoKTsKKyAg
ICAKKyAgICB2b2lkIHNldFByZXYoVCopOworICAgIHZvaWQgc2V0TmV4dChUKik7CisgICAgCisg
ICAgVCogcHJldigpIGNvbnN0OworICAgIFQqIG5leHQoKSBjb25zdDsKKyAgICAKKyAgICB2b2lk
IHJlbW92ZSgpOworICAgIHZvaWQgcHJlcGVuZChUKik7CisgICAgdm9pZCBhcHBlbmQoVCopOwor
ICAgIAorICAgIGJvb2wgaXNPbkxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCEh
bV9wcmV2ID09ICEhbV9uZXh0KTsKKyAgICAgICAgcmV0dXJuICEhbV9wcmV2OworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBUKiBtX3ByZXY7CisgICAgVCogbV9uZXh0OworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdE5vZGU8VD46OkRvdWJs
eUxpbmtlZFNlbnRpbmVsTGlzdE5vZGUoKQoreworICAgIHNldFByZXYoMCk7CisgICAgc2V0TmV4
dCgwKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRG91Ymx5TGlua2Vk
U2VudGluZWxMaXN0Tm9kZTxUPjo6c2V0UHJldihUKiBwcmV2KQoreworICAgIG1fcHJldiA9IHBy
ZXY7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERvdWJseUxpbmtlZFNl
bnRpbmVsTGlzdE5vZGU8VD46OnNldE5leHQoVCogbmV4dCkKK3sKKyAgICBtX25leHQgPSBuZXh0
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogRG91Ymx5TGlua2VkU2VudGlu
ZWxMaXN0Tm9kZTxUPjo6cHJldigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJldjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdE5v
ZGU8VD46Om5leHQoKSBjb25zdAoreworICAgIHJldHVybiBtX25leHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdE5vZGU8VD46
OnJlbW92ZSgpCit7CisgICAgQVNTRVJUKGlzT25MaXN0KCkpOworICAgIHByZXYoKS0+c2V0TmV4
dChuZXh0KCkpOworICAgIG5leHQoKS0+c2V0UHJldihwcmV2KCkpOworICAgIHNldE5leHQoMCk7
CisgICAgc2V0UHJldigwKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQg
RG91Ymx5TGlua2VkU2VudGluZWxMaXN0Tm9kZTxUPjo6YXBwZW5kKFQqIG5vZGUpCit7CisgICAg
QVNTRVJUKCEhbV9uZXh0KTsKKyAgICBBU1NFUlQoIW5vZGUtPmlzT25MaXN0KCkpOworICAgIG5v
ZGUtPnNldFByZXYoc3RhdGljX2Nhc3Q8VCo+KHRoaXMpKTsKKyAgICBub2RlLT5zZXROZXh0KG5l
eHQoKSk7CisgICAgbmV4dCgpLT5zZXRQcmV2KG5vZGUpOworICAgIHNldE5leHQobm9kZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERvdWJseUxpbmtlZFNlbnRpbmVs
TGlzdE5vZGU8VD46OnByZXBlbmQoVCogbm9kZSkKK3sKKyAgICBBU1NFUlQoISFtX3ByZXYpOwor
ICAgIEFTU0VSVCghbm9kZS0+aXNPbkxpc3QoKSk7CisgICAgbm9kZS0+c2V0TmV4dChzdGF0aWNf
Y2FzdDxUKj4odGhpcykpOworICAgIG5vZGUtPnNldFByZXYocHJldigpKTsKKyAgICBwcmV2KCkt
PnNldE5leHQobm9kZSk7CisgICAgc2V0UHJldihub2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY2xhc3MgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0IHsKK3B1YmxpYzoKKyAgICBEb3Vi
bHlMaW5rZWRTZW50aW5lbExpc3QoKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OyAvLyBUaGlzIGlzIE8obikuCisgICAgdm9pZCBjbGVh
cigpOworCisgICAgVCogaGVhZCgpIGNvbnN0OworICAgIFQqIHJlbW92ZUhlYWQoKTsKKworICAg
IGNvbnN0IFQqIGhlYWRTZW50aW5lbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFQqPigmbV9oZWFkU2VudGluZWwpOyB9CisgICAgY29uc3QgVCogdGFpbFNlbnRpbmVsKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KCZtX3RhaWxTZW50aW5lbCk7IH0KKyAg
ICBUKiBoZWFkU2VudGluZWwoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUKj4oJm1faGVhZFNlbnRp
bmVsKTsgfQorICAgIFQqIHRhaWxTZW50aW5lbCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQqPigm
bV90YWlsU2VudGluZWwpOyB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoVCopOworICAgIHZvaWQg
cmVtb3ZlKFQqKTsKKworcHJpdmF0ZToKKyAgICBEb3VibHlMaW5rZWRTZW50aW5lbExpc3ROb2Rl
PFQ+IG1faGVhZFNlbnRpbmVsOworICAgIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdE5vZGU8VD4g
bV90YWlsU2VudGluZWw7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRG91Ymx5
TGlua2VkU2VudGluZWxMaXN0PFQ+OjpEb3VibHlMaW5rZWRTZW50aW5lbExpc3QoKQoreworICAg
IGNsZWFyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIERvdWJseUxp
bmtlZFNlbnRpbmVsTGlzdDxUPjo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYWQo
KSAhPSB0YWlsU2VudGluZWwoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHNp
emVfdCBEb3VibHlMaW5rZWRTZW50aW5lbExpc3Q8VD46OnNpemUoKSBjb25zdAoreworICAgIHNp
emVfdCBzaXplID0gMDsKKyAgICBmb3IgKFQqIG5vZGUgPSBoZWFkKCk7IG5vZGUgIT0gdGFpbFNl
bnRpbmVsKCk7IG5vZGUgPSBub2RlLT5uZXh0KCkpCisgICAgICAgICsrc2l6ZTsKKyAgICByZXR1
cm4gc2l6ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRG91Ymx5TGlu
a2VkU2VudGluZWxMaXN0PFQ+OjpjbGVhcigpCit7CisgICAgaGVhZFNlbnRpbmVsKCktPnNldE5l
eHQodGFpbFNlbnRpbmVsKCkpOworICAgIHRhaWxTZW50aW5lbCgpLT5zZXRQcmV2KGhlYWRTZW50
aW5lbCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIERvdWJseUxpbmtl
ZFNlbnRpbmVsTGlzdDxUPjo6aGVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlYWRTZW50aW5l
bCgpLT5uZXh0KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERvdWJs
eUxpbmtlZFNlbnRpbmVsTGlzdDxUPjo6YXBwZW5kKFQqIG5vZGUpCit7CisgICAgdGFpbFNlbnRp
bmVsKCktPnByZXBlbmQobm9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdDxUPjo6cmVtb3ZlKFQqIG5vZGUpCit7CisgICAg
bm9kZS0+cmVtb3ZlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBEb3Vi
bHlMaW5rZWRTZW50aW5lbExpc3Q8VD46OnJlbW92ZUhlYWQoKQoreworICAgIFQqIHJlc3VsdCA9
IGhlYWQoKTsKKyAgICBpZiAocmVzdWx0ID09IHRhaWxTZW50aW5lbCgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXN1bHQtPnJlbW92ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRvdWJseUxpbmtlZFNlbnRpbmVsTGlzdE5v
ZGU7Cit1c2luZyBXVEY6OkRvdWJseUxpbmtlZFNlbnRpbmVsTGlzdDsKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5NDAzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTU0
LDYgKzk1NCwxMCBAQAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFk
ZWZpbmVkKEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04pICYmIEVOQUJMRShERkdfSklUKQorI2Rl
ZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBDdXJyZW50bHkg
b25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShN
QUMpICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoSklU
KSAmJiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9WQUxV
RV9QUk9GSUxFUiAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105565</attachid>
            <date>2011-08-29 20:04:05 -0700</date>
            <delta_ts>2011-08-30 20:37:04 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>tiering_patch_2.diff</filename>
            <type>text/plain</type>
            <size>68205</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQwNDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE0IEBA
CisyMDExLTA4LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCB0aGUg
bm90aW9uIHRoYXQgYW4gZXhlY3V0YWJsZSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIENvZGVCbG9j
aworICAgICAgICBmb3IgYSBwYXJ0aWN1bGFyIHJvbGUuIENvZGVCbG9ja3MgZm9ybSBsaW5rZWQg
bGlzdHMsIG9yZGVyZWQgaW4KKyAgICAgICAgZGVzY2VuZGluZyB0ZWFyIChzbyBpZiB0aGUgY29k
ZSBpcyBvcHRpbWl6ZWQsIHRoZSBmaXJzdCBDb2RlQmxvY2sKKyAgICAgICAgd2lsbCBiZSBERkcg
YW5kIHRoZSBzZWNvbmQgd2lsbCBiZSB0aGUgb2xkIEpJVCkuIFRoZSBvbGQgSklUIGhhcworICAg
ICAgICBleGVjdXRpb24gY291bnRlcnMgZm9yIGVhY2ggQ29kZUJsb2NrLCB3aGljaCBkZWNpZGUg
d2hlbiB0byB0aWVyIHVwLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbGwgZGlzYWJsZWQg
YnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIG5vdCB5ZXQgYSBwZXJmb3JtYW5jZQorICAgICAgICB3
aW4uICBXaGVuIGRpc2FibGVkIGl0IGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwuCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xl
YXJFdmFsQ2FjaGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhpc3RpbmdFbnRyaWVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSk6CisgICAgICAg
IChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9j
azo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxl
T3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjphbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVsZWFzZUFsdGVybmF0
aXZlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNJbmNvbWluZ0NhbGxzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRKSVRDb2Rl
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRKSVRUeXBlKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6R2xvYmFs
Q29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJs
b2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZh
bENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNv
ZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcv
REZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5r
KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZn
TGlua0Zvcik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VGltZW91dENoZWNr
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6bGlua0Zvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAg
ICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Ym90dG9t
VGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OnRvcFRpZXJKSVQpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpuZXh0VGllckpJVCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGppdC9KSVRT
dHVicy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZU9wdGltaXplZEZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yKToKKyAgICAgICAgKiB3dGYv
RG91Ymx5TGlua2VkU2VudGluZWxMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpEb3VibHlM
aW5rZWRTZW50aW5lbExpc3ROb2RlOjppc09uTGlzdCk6CisgICAgICAgIChXVEY6Ojo6RG91Ymx5
TGlua2VkU2VudGluZWxMaXN0Tm9kZSk6CisgICAgICAgIChXVEY6Ojo6c2V0UHJldik6CisgICAg
ICAgIChXVEY6Ojo6c2V0TmV4dCk6CisgICAgICAgIChXVEY6Ojo6cHJldik6CisgICAgICAgIChX
VEY6Ojo6bmV4dCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Ojph
cHBlbmQpOgorICAgICAgICAoV1RGOjo6OnByZXBlbmQpOgorICAgICAgICAoV1RGOjpEb3VibHlM
aW5rZWRTZW50aW5lbExpc3Q6OmhlYWRTZW50aW5lbCk6CisgICAgICAgIChXVEY6OkRvdWJseUxp
bmtlZFNlbnRpbmVsTGlzdDo6dGFpbFNlbnRpbmVsKToKKyAgICAgICAgKFdURjo6OjpEb3VibHlM
aW5rZWRTZW50aW5lbExpc3QpOgorICAgICAgICAoV1RGOjo6OmlzRW1wdHkpOgorICAgICAgICAo
V1RGOjo6OnNpemUpOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Ojpo
ZWFkKToKKyAgICAgICAgKFdURjo6OjpyZW1vdmVIZWFkKToKKyAgICAgICAgKiB3dGYvUGxhdGZv
cm0uaDoKKwogMjAxMS0wOC0yOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVuemlwIGluaXRpYWxpemF0aW9uIGxpc3RzIGFuZCBjb25zdHJ1Y3Rv
cnMgaW4gSlNDZWxsIGhpZXJhcmNoeSAoMy83KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEw
ICs1MiwxMSBAQAogCQkwRjc3MDA5MDE0MDJGREU0MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4
RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5
IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmNwcCAqLzsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYx
M0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDODE1MTYxNDA1
MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFi
bGVTcGVjdHJ1bS5jcHAgKi87IH07CiAJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgx
NTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA4MTQwNDNCQ0EwMENG
QTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsgfTsKKwkJMEZDODE1MTUxNDA1MTE5
QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTIxNDA1MTE4NjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsKKwkJMEZEMzM3NzQxNDBBRUM5MTAw
N0M3MDA3IC8qIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMzM3NzIxNDBBRUM4MjAwN0M3MDA3IC8qIERv
dWJseUxpbmtlZFNlbnRpbmVsTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2
NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8q
IE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXgu
Y3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBw
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
ODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAg
LTczOSwxMCArNzQwLDExIEBACiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGlu
Z0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3Vu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZU
YWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQw
NDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJp
ZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzgxNTEyMTQwNTEx
ODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQzMzc3MjE0MEFFQzgyMDA3QzcwMDcgLyogRG91Ymx5TGlu
a2VkU2VudGluZWxMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvdWJs
eUxpbmtlZFNlbnRpbmVsTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAw
MDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBK
U0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzAsNiArMTY3Miw3IEBA
CiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDMzNzcyMTQwQUVDODIwMDdDNzAwNyAvKiBE
b3VibHlMaW5rZWRTZW50aW5lbExpc3QuaCAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3
NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLAog
CQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICovLApAQCAtMjI1MSw2ICsy
MjU0LDcgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBB
cnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzMzc3NDE0MEFFQzkxMDA3
QzcwMDcgLyogRG91Ymx5TGlua2VkU2VudGluZWxMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDk0
MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEsMTcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7
CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1
c3RlZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworI2lmIENQVShYODZf
NjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgWDg2UmVnaXN0ZXJz
OjpyMTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyMTEpKTsK
KyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRlc3QubV9w
dHIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25k
aXRpb24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAg
YWRkMzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDkgKzE0MDEs
MTAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1Db2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVU
eXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1i
b2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCitDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBK
U0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFi
LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkK
ICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4
ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291bnRlcigtMTApCiAgICAgLCBtX251
bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFt
ZXRlcnMoMCkKQEAgLTE0MjIsNiArMTQyMyw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9z
b3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCisg
ICAgLCBtX2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQogewogICAgIEFTU0VSVChtX3NvdXJjZSk7
CiAKQEAgLTE0NDgsNiArMTQ1MCwxNSBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgICAg
ICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkNlbGwoKSk7CiAgICAgfQogI2VuZGlmCisg
ICAgCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0aGVyZSBh
cmUgaW5jb21pbmcgY2FsbHMuIEJ1dAorICAgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGR1cmluZyBo
ZWFwIGRlc3RydWN0aW9uLCB0aGVuIGZvciBjb25zaXN0ZW5jeSdzIHNha2UKKyAgICAvLyB3ZSBt
YWtlIHN1cmUgdGhhdCBvdXIgaW5jb21pbmcgY2FsbHMgYXJlIG5vdCBvbiBvdXIgbGlzdC4KKyAg
ICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLnJlbW92ZUhlYWQoKSkgeyB9CisgICAgCisgICAgLy8g
Tm90ZSB0aGF0IG91ciBvdXRnb2luZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBD
b2RlQmxvY2tzJworICAgIC8vIG1faW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0
aGUgZXhlY3V0aW9uIG9mIHRoZSB+Q2FsbExpbmtJbmZvCisgICAgLy8gZGVzdHJ1Y3RvcnMuCiAK
ICNpZiBFTkFCTEUoSklUKQogICAgIGZvciAoc2l6ZV90IHNpemUgPSBtX3N0cnVjdHVyZVN0dWJJ
bmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpAQCAtMTUxNSw2ICsxNTI2LDggQEAg
dm9pZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VgogCiB2b2lkIENvZGVCbG9j
azo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgaWYgKCEhbV9h
bHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7CkBAIC0xNzI3
LDggKzE3NDAsMzAgQEAgdm9pZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYQog
fQogICAgIAogI2lmIEVOQUJMRShKSVQpCit2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAg
ICBBU1NFUlQoaXNMaW5rZWQoKSk7CisgICAgCisgICAgaWYgKGlzREZHKSB7CisjaWYgRU5BQkxF
KERGR19KSVQpCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwo
Y2FsbFJldHVybkxvY2F0aW9uKSwgaXNDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRp
b25MaW5rQ29uc3RydWN0KTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
I2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2Nh
dGlvbk5lYXJDYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbD8gZ2xvYmFsRGF0YS5qaXRT
dHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0
dWFsQ29uc3RydWN0TGluaygpKTsKKyAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwor
ICAgIGNhbGxlZS5jbGVhcigpOworCisgICAgLy8gSXQgd2lsbCBiZSBvbiBhIGxpc3QgaWYgdGhl
IGNhbGxlZSBoYXMgYSBjb2RlIGJsb2NrLgorICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICBy
ZW1vdmUoKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKIHsKKyAgICBpZiAo
ISFtX2FsdGVybmF0aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT51bmxpbmtDYWxscygpOwog
ICAgIGlmICghKG1fY2FsbExpbmtJbmZvcy5zaXplKCkgfHwgbV9tZXRob2RDYWxsTGlua0luZm9z
LnNpemUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fZ2xvYmFsRGF0YS0+Y2FuVXNl
SklUKCkpCkBAIC0xNzM3LDI0ICsxNzcyLDg5IEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxs
cygpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpOyBp
KyspIHsKICAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZ2V0SklUQ29kZSgpLmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwobV9jYWxsTGlua0luZm9zW2ldLmNhbGxS
ZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBvcGVyYXRpb25MaW5r
Q2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotI2Vsc2UKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsTGlua0luZm9zW2ld
LmNhbGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBtX2dsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6IG1fZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOwotICAgICAgICBtX2NhbGxMaW5rSW5m
b3NbaV0udW5saW5rKCk7CisgICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKm1fZ2xv
YmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgfQogfQorCit2b2lkIENvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscygpCit7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRo
aXMpOworICAgIHdoaWxlIChDYWxsTGlua0luZm8qIGluZm8gPSBtX2luY29taW5nQ2FsbHMucmVt
b3ZlSGVhZCgpKQorICAgICAgICBpbmZvLT51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1
ZmZlcik7Cit9CiAjZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6OmNsZWFyRXZhbENhY2hlKCkKIHsK
KyAgICBpZiAoISFtX2FsdGVybmF0aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT5jbGVhckV2
YWxDYWNoZSgpOwogICAgIGlmICghbV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIG1f
cmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS5jbGVhcigpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgoraW5saW5lIHZvaWQgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhWZWN0b3I8VD4mIHRhcmdl
dCwgVmVjdG9yPFQ+JiBzb3VyY2UpCit7CisgICAgQVNTRVJUKHRhcmdldC5zaXplKCkgPD0gc291
cmNlLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXQuc2l6ZSgpOyAr
K2kpCisgICAgICAgIHRhcmdldFtpXSA9IHNvdXJjZVtpXTsKK30KKwordm9pZCBDb2RlQmxvY2s6
OmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCkKK3sKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmUpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fY29uc3Rh
bnRSZWdpc3RlcnMsIG1fYWx0ZXJuYXRpdmUtPm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAgIHJl
cGxhY2VFeGlzdGluZ0VudHJpZXMobV9mdW5jdGlvbkRlY2xzLCBtX2FsdGVybmF0aXZlLT5tX2Z1
bmN0aW9uRGVjbHMpOworICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9mdW5jdGlvbkV4cHJz
LCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9uRXhwcnMpOworfQorCisvLyBGSVhNRTogSW1wbGVt
ZW50IE9TUi4gSWYgY29tcGlsZU9wdGltaXplZCgpIGlzIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBv
dGhlciB0aGFuIHRoZQorLy8gZXBpbG9ndWUsIGRvIE9TUiBmcm9tIHRoZSBvbGQgY29kZSBibG9j
ayB0byB0aGUgbmV3IG9uZS4KKworLy8gRklYTUU6IEFmdGVyIGRvaW5nIHN1Y2Nlc3NmdWwgb3B0
aW1pemVkIGNvbXBpbGF0aW9uLCByZXNldCB0aGUgcHJvZmlsaW5nIGNvdW50ZXIgdG8gLTEsIHNv
CisvLyB0aGF0IHRoZSBuZXh0IGV4ZWN1dGlvbiBvZiB0aGUgb2xkIGNvZGUgYmxvY2sgd2lsbCBq
dW1wIHN0cmFpZ2h0IGludG8gY29tcGlsZU9wdGltaXplZCgpCisvLyBhbmQgcGVyZm9ybSBPU1Iu
CisKKy8vIEZJWE1FOiBFbnN1cmUgdGhhdCBhIGNhbGwgdG8gY29tcGlsZU9wdGltaXplZCgpIGp1
c3QgZG9lcyBPU1IgKGFuZCByZXNldHMgdGhlIGNvdW50ZXIgdG8gLTEpCisvLyBpZiB0aGUgY29k
ZSBoYWQgYWxyZWFkeSBiZWVuIGNvbXBpbGVkLgorCitDb2RlQmxvY2sqIFByb2dyYW1Db2RlQmxv
Y2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFByb2dyYW1FeGVj
dXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZSgpOworfQorCitD
b2RlQmxvY2sqIEV2YWxDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0
YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRC
eXRlY29kZSgpOworfQorCitDb2RlQmxvY2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVu
dCgpCit7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKG1faXNDb25zdHJ1Y3RvciA/IENv
ZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9CisKK0pTT2JqZWN0KiBQcm9ncmFtQ29k
ZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRh
YmxlKCkpLT5jb21waWxlT3B0aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKK30KKworSlNP
YmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxhY2VtZW50KCkt
PmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUp
OworfQorCitKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYg
KHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRK
SVRUeXBlKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkRm9y
KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0
IDogQ29kZUZvckNhbGwpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk0MDM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAi
VVN0cmluZy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUgPHd0Zi9Eb3Vi
bHlMaW5rZWRTZW50aW5lbExpc3QuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAt
OTcsMTIgKzk4LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBFTkFCTEUoSklU
KQotICAgIHN0cnVjdCBDYWxsTGlua0luZm8geworICAgIHN0cnVjdCBDYWxsTGlua0luZm86IHB1
YmxpYyBEb3VibHlMaW5rZWRTZW50aW5lbExpc3ROb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAg
ICBDYWxsTGlua0luZm8oKQogICAgICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxz
ZSkKICAgICAgICAgICAgICwgaXNDYWxsKGZhbHNlKQorICAgICAgICAgICAgLCBpc0RGRyhmYWxz
ZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+Q2FsbExpbmtJbmZv
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgICAgICAg
ICAgcmVtb3ZlKCk7CisgICAgICAgIH0KIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxs
UmV0dXJuTG9jYXRpb247IC8vIGl0J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBKSVQsIG9yIGEg
bm9ybWFsIGNhbGwgaW4gREZHCiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQ
YXRoQmVnaW47CkBAIC0xMTAsMTMgKzExOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKICAgICAgICAgYm9vbCBoYXNTZWVu
U2hvdWxkUmVwYXRjaCA6IDE7CiAgICAgICAgIGJvb2wgaXNDYWxsIDogMTsKKyAgICAgICAgYm9v
bCBpc0RGRyA6IDE7CiAKICAgICAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsg
fQotICAgICAgICB2b2lkIHVubGluaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhhc1NlZW5T
aG91bGRSZXBhdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAg
ICAgfQorICAgICAgICB2b2lkIHVubGluayhKU0dsb2JhbERhdGEmLCBSZXBhdGNoQnVmZmVyJik7
CiAKICAgICAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgICAgIHsKQEAgLTIwOSwxMyArMjE0LDE2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9i
amVjdCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQs
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAgICAgICAg
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpT
R2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJj
ZU9mZnNldCwgU3ltYm9sVGFibGUqLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29k
ZUJsb2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2Jq
ZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgSGVhcCogbV9oZWFwOwogCiAgICAgcHVibGlj
OgogICAgICAgICB2aXJ0dWFsIH5Db2RlQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIENvZGVC
bG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9CisgICAg
ICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBt
X2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQogCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImKTsKIApAQCAtMjc3LDYgKzI4NSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgaGFzSW5jb21pbmdDYWxscygpIHsgcmV0dXJuICFtX2luY29taW5nQ2FsbHMuaXNFbXB0
eSgpOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbExpbmtJ
bmZvKiBpbmNvbWluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmFw
cGVuZChpbmNvbWluZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgdW5saW5r
SW5jb21pbmdDYWxscygpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCkBAIC0y
OTgsOCArMzE1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklU
KQotICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9y
ID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKSA6IG93
bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9CisgICAgICAgIHZv
aWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVdpdGhBcml0eUNoZWNrKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ppdENvZGUgPSBj
b2RlOworICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5
Q2hlY2s7CisgICAgICAgIH0KKyAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJu
IG1faml0Q29kZTsgfQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJl
dHVybiBtX2ppdENvZGUuaml0VHlwZSgpOyB9CiAgICAgICAgIEV4ZWN1dGFibGVQb29sKiBleGVj
dXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9
CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwg
U2NvcGVDaGFpbk5vZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCgpID0gMDsKKyNlbHNlCisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgp
IHsgcmV0dXJuIEpJVENvZGU6OkJhc2VsaW5lSklUOyB9CiAjZW5kaWYKIAogICAgICAgICBTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhl
Y3V0YWJsZS5nZXQoKTsgfQpAQCAtNTMzLDYgKzU2MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgRXZhbENvZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKICAgICAg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBjb3B5RGF0YUZy
b21BbHRlcm5hdGl2ZSgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IC0xOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CiAK
ICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJlcnMgcHJpdmF0ZS4K
IApAQCAtNTkyLDYgKzYyOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8R2xv
YmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2Fs
bExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlu
a0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsKKyAgICAgICAgSklUQ29kZSBtX2ppdENvZGU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsK
KyAgICAgICAgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0PENhbGxMaW5rSW5mbz4gbV9pbmNvbWlu
Z0NhbGxzOwogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdt
ZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC02MDgsNiAr
NjQ3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9s
VGFibGU7CiAKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsgLy8gRklY
TUUgbWFrZSB0aGlzIGRvIHNvbWV0aGluZworCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAg
ICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6CkBAIC02
NDQsOSArNjg1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gcmVzcG9uc2libGUgZm9yIG1h
cmtpbmcgaXQuCiAKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2Nr
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5z
aWduZWQgc291cmNlT2Zmc2V0KQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRh
YmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0
LCAmbV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVU
eXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNz
T3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IENvZGVCbG9jayhv
d25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBz
b3VyY2VPZmZzZXQsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlLCBhbHRlcm5hdGl2ZSkK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTY1NiwxNiArNjk3LDIyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxv
Y2sgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIp
Ci0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAg
ICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAg
ICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNl
bmRpZgogICAgIH07CiAKICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENv
ZGVCbG9jayB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgp
Ci0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2Rl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAgICBFdmFsQ29kZUJsb2Nr
KEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFz
ZVNjb3BlRGVwdGgsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAg
ICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9i
amVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQogICAgICAgICAgICAgLCBtX2Jh
c2VTY29wZURlcHRoKGJhc2VTY29wZURlcHRoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTY3
OSw2ICs3MjYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQobV92YXJp
YWJsZXMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVz
KTsKICAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KTsKKyNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7
CkBAIC02OTEsMTQgKzc0NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYXMgd2Ug
bmVlZCB0byBpbml0aWFsaXNlIHRoZSBDb2RlQmxvY2sgYmVmb3JlIHdlIGNvdWxkIGluaXRpYWxp
c2UgYW55IFJlZlB0ciB0byBob2xkIHRoZSBzaGFyZWQKICAgICAgICAgLy8gc3ltYm9sIHRhYmxl
LCBzbyB3ZSBqdXN0IHBhc3MgYXMgYSByYXcgcG9pbnRlciB3aXRoIGEgcmVmIGNvdW50IG9mIDEu
ICBXZSB0aGVuIG1hbnVhbGx5IGRlcmVmCiAgICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9yLgot
ICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VP
ZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVy
RXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJj
ZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1
Y3RvcikKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQg
c291cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBh
bHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29k
ZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVk
U3ltYm9sVGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvciwgYWx0ZXJuYXRp
dmUpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2soKQog
ICAgICAgICB7CiAgICAgICAgICAgICBzaGFyZWRTeW1ib2xUYWJsZSgpLT5kZXJlZigpOwogICAg
ICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2Vu
ZGlmCiAgICAgfTsKIAogICAgIGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRl
eCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDAzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2VydmVM
YXN0VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgpOwog
fQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHBy
b2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkK
ICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3Qt
PnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhz
Y29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKQEAgLTIy
OCw2ICsyMjgsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAg
ICAgCiAgICAgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9IDE7IC8vIEFsbG9jYXRlIHNw
YWNlIGZvciAidGhpcyIKICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJs
b2NrLT5tX251bVZhcnM7CisgICAgCisgICAgaWYgKGNvbXBpbGF0aW9uS2luZCA9PSBPcHRpbWl6
aW5nQ29tcGlsYXRpb24pCisgICAgICAgIHJldHVybjsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yNTgsNyArMjYxLDcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIH0KIH0KIAot
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1
bmN0aW9uQm9keSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29w
ZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9m
aWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1Byb2ZpbGluZygpKQog
ICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0
LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkBAIC00MTksNyArNDIyLDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgIH0KIH0KIAotQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayog
Y29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2Rl
KiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCiAgICAg
OiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdn
ZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxP
YmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNl
SW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw5ICs5MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgc2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KTsKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKCk7CiAKLSAgICAgICAg
Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRh
YmxlKiwgUHJvZ3JhbUNvZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5j
dGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayop
OwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwg
U3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKik7CisgICAgICAgIGVudW0gQ29tcGlsYXRpb25L
aW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0aW9uIH07CisgICAgICAg
IAorICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2Rl
KiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAg
ICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5Ob2Rl
KiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAgICAgICBC
eXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUq
LCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKIAogICAgICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KICAgICAgICAg
Y29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAq
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTQwMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTA1LDYgKzkwNSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7
CiAgICAgICAgIGluZm8uaXNDYWxsID0gbV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBp
bmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2Rl
TG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0Nh
bGwpKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
bV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVy
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lv
biA5NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsOSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRl
KiBleGVjLCBDYWxsTGluCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkp
OwogICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5n
bG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0lu
Y29taW5nQ2FsbCgmY2FsbExpbmtJbmZvKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw2ICs5MywxNiBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IENvZGVCCiB7CiB9CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQordm9pZCBKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25DaGVja0tpbmQga2luZCkKK3sKKyAg
ICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKE5vblplcm8sIFRydXN0ZWRJbW0zMigx
KSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRlQ291bnRlcikpOworICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNr
ID8gY3RpX29wdGltaXplX2Zyb21fbG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CisgICAg
c3R1YkNhbGwuY2FsbCgpOworICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOworfQorI2VuZGlm
CisKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQog
ewpAQCAtMTAyLDYgKzExMiw4IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBz
dHViQ2FsbC5jYWxsKHRpbWVvdXRDaGVja1JlZ2lzdGVyKTsKICAgICBzdHViQ2FsbC5nZXRBcmd1
bWVudCgwLCByZWdUMSwgcmVnVDApOyAvLyByZWxvYWQgbGFzdCByZXN1bHQgcmVnaXN0ZXJzLgog
ICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7CisgICAgCisgICAgZW1pdE9wdGltaXphdGlvbkNo
ZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7CiB9CiAjZWxzZQogdm9pZCBKSVQ6OmVtaXRUaW1l
b3V0Q2hlY2soKQpAQCAtMTExLDYgKzEyMyw4IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNr
KCkKICAgICBza2lwVGltZW91dC5saW5rKHRoaXMpOwogCiAgICAga2lsbExhc3RSZXN1bHRSZWdp
c3RlcigpOworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9u
Q2hlY2spOwogfQogI2VuZGlmCiAKQEAgLTYyMyw3ICs2MzcsNyBAQCBKSVRDb2RlIEpJVDo6cHJp
dmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAgICAgICAq
ZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hl
Y2spOwotCisgICAgCiAgICAgcmV0dXJuIEpJVENvZGUocGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
KCksIEpJVENvZGU6OkJhc2VsaW5lSklUKTsKIH0KIApAQCAtNjM3LDYgKzY1MSw5IEBAIHZvaWQg
SklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ28KICAgICAgICAgQVNTRVJUKCFjYWxs
TGlua0luZm8tPmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQo
Kmdsb2JhbERhdGEsIGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwgY29kZSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5j
b21pbmdDYWxsKGNhbGxMaW5rSW5mbyk7CiAgICAgfQogCiAgICAgLy8gcGF0Y2ggdGhlIGNhbGwg
c28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBsaW5rLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiA5NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIExvYWRzIHRoZSBjaGFyYWN0ZXIgdmFsdWUgb2YgYSBzaW5nbGUgY2hhcmFj
dGVyIHN0cmluZyBpbnRvIGRzdC4KICAgICAgICAgdm9pZCBlbWl0TG9hZENoYXJhY3RlclN0cmlu
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcyk7CiAg
ICAgICAgIAorICAgICAgICBlbnVtIE9wdGltaXphdGlvbkNoZWNrS2luZCB7IExvb3BPcHRpbWl6
YXRpb25DaGVjaywgUmV0T3B0aW1pemF0aW9uQ2hlY2sgfTsKKyNpZiBFTkFCTEUoVElFUkVEX0NP
TVBJTEFUSU9OKQorICAgICAgICB2b2lkIGVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRp
b25DaGVja0tpbmQpOworI2Vsc2UKKyAgICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2so
T3B0aW1pemF0aW9uQ2hlY2tLaW5kKSB7IH0KKyNlbmRpZgorICAgICAgICAKICAgICAgICAgdm9p
ZCBlbWl0VGltZW91dENoZWNrKCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICB2b2lkIHByaW50
Qnl0ZWNvZGVPcGVyYW5kVHlwZXModW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiA5
NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsVmFy
YXJnc1Nsb3dDYXNlKEkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXph
dGlvbkNoZWNrKTsKKyAgICAKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwogCiAgICAgZW1pdExvYWQoZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtMTE4
LDYgKzEyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmUKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlv
bkNoZWNrKTsKKyAgICAKICAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gOTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMjMgKzI3LDUwIEBACiAjZGVmaW5lIEpJVENvZGVfaAogCiAjaWYg
RU5BQkxFKEpJVCkKLQogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUu
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJQcm9maWxl
ci5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewogCisjaWYgRU5BQkxFKEpJVCkKICAgICBj
bGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxlOworI2VuZGlmCiAgICAg
CiAgICAgY2xhc3MgSklUQ29kZSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgQ29kZVB0cjsKKyNlbHNlCisgICAgICAgIEpJVENvZGUoKSB7IH0KKyNlbmRp
ZgogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBKSVRUeXBlIHsgSG9zdENhbGxUaHVuaywgQmFz
ZWxpbmVKSVQsIERGR0pJVCB9OwotCisgICAgICAgIAorICAgICAgICBzdGF0aWMgSklUVHlwZSBi
b3R0b21UaWVySklUKCkKKyAgICAgICAgeworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04p
CisgICAgICAgICAgICByZXR1cm4gQmFzZWxpbmVKSVQ7CisjZWxzZQorICAgICAgICAgICAgcmV0
dXJuIERGR0pJVDsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
SklUVHlwZSB0b3BUaWVySklUKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIERGR0pJ
VDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJK
SVQoSklUVHlwZSBqaXRUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGppdFR5cGUsIGppdFR5cGUgPT0gQmFzZWxpbmVKSVQgfHwgaml0VHlwZSA9PSBERkdKSVQpOwor
ICAgICAgICAgICAgcmV0dXJuIERGR0pJVDsKKyAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFC
TEUoSklUKQogICAgICAgICBKSVRDb2RlKCkKICAgICAgICAgewogICAgICAgICB9CkBAIC01Myw3
ICs4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlw
ZSkKICAgICAgICAgewogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgb3BlcmF0
b3IgISgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhbV9yZWYubV9jb2Rl
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0xMjQsMTAgKzE1MSw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIENvZGVSZWYgbV9yZWY7CiAgICAgICAgIEpJVFR5cGUgbV9qaXRUeXBlOwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgfTsKIAogfTsKIAogI2VuZGlmCi0KLSNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA5
NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1Miw2ICs0NTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9h
cmd1bWVudHMoSW5zCiAKIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRp
b25DaGVjayk7CisgICAgCiAgICAgQVNTRVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsK
ICAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJl
dHVyblZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtNDcyLDYgKzQ3NCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmUKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsK
KyAgICAKICAgICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0gcmVnVDEpOwogICAgIEFTU0VS
VChyZWdUMSAhPSByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVS
ZWdpc3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxNiw2ICsxODE2LDMyIEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX2NoZWNrX2hhc18KICAgICBWTV9USFJPV19F
WENFUFRJT05fQVRfRU5EKCk7CiB9CiAKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGlt
aXplX2Zyb21fbG9vcCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CisgICAgCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKwor
ICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJh
bWUsIHNjb3BlQ2hhaW4pOworICAgIGlmIChlcnJvcikKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZnJvbSBsb29wIGZhaWxlZC5cbiIpOwor
fQorCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX3JldCkKK3sKKyAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisgICAgCisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKworICAgIEpTT2JqZWN0KiBlcnJvciA9
IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOworICAg
IGlmIChlcnJvcikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBvcHRpbWl6ZWQg
Y29tcGlsYXRpb24gZnJvbSByZXQgZmFpbGVkLlxuIik7Cit9CisKIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9pbnN0YW5jZW9mKQogewogICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmgJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNiArNDIzLDggQEAgZXh0ZXJuICJDIiB7CiAgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbihTVFVCX0FSR1NfREVDTEFS
QVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3Rocm93X3JlZmVy
ZW5jZV9lcnJvcihTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIHZvaWQgSklUX1NUVUIgY3Rp
X29wdGltaXplX2Zyb21fbG9vcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wdGltaXplX2Zyb21fcmV0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAg
dm9pZCogSklUX1NUVUIgY3RpX29wX2NhbGxfYXJpdHlDaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayhTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2ppdENv
bXBpbGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiA5NDAzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsOCArMTcwLDE4IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKEUK
ICAgICBmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGZpcnN0TGluZSwg
bGFzdExpbmUpOwogfQogCitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6
ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7Cisg
ICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBB
U1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAg
aWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQo
KSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7Cisg
ICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAKLUpT
T2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBKU09iamVjdCogZXhj
ZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOwpAQCAtMTg3LDI2ICsxOTcsNDAgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpj
b21waWxlSW50ZXJuYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3Bl
Q2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1fZXZhbENvZGVC
bG9jayk7Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2so
dGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+
bG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3Io
YWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNoYWlu
Tm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0
KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxD
b2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0
b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9ldmFsQ29kZUJsb2Nr
ID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2Uo
KS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVC
bG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRv
cihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlQ2hh
aW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5n
ZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRv
cjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGls
YXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7
Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay5jbGVhcigpOworICAgICAgICBtX2V2YWxDb2RlQmxv
Y2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+
cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsK
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBldmFsTm9kZS0+ZGVzdHJv
eURhdGEoKTsKKyAgICBtX2V2YWxDb2RlQmxvY2stPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7
CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklU
KCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGUoZXhlYywgbV9l
dmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgaWYgKCFkZmdD
b21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICBpZiAo
aml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21waWxlZCA9IHRy
eURGR0NvbXBpbGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxs
KTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKQorICAgICAgICAgICAgQVNTRVJUKCFtX2V2YWxD
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkgfHwgIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aGFzSW5jb21pbmdDYWxscygpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAo
bV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhl
cmUgaXMgYWxyZWFkeSBhbiBhbHRlcm5hdGl2ZSBwaWVjZSBvZiBjb2RlIGNvbXBpbGVkIHdpdGgg
YSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQsIHNvIHdlIGNhbiBzaWxlbnRseSBm
YWlsLgorICAgICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRh
LCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVk
Q29kZSgpKQogICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUoKTsK
ICNlbmRpZgorICAgICAgICBtX2V2YWxDb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9y
Q2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0yNjUs
MTAgKzI4OSwxOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAg
ICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpj
b21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgQVNT
RVJUKCFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCku
ZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsK
KyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmdl
dEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29t
cGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVCht
X3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fcHJvZ3Jh
bUNvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOworfQogCitKU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQorewogICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0yODEsMjUgKzMxNCwzOSBAQCBKU09i
amVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAg
ICAKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9j
ayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsK
LSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0
ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFs
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpKSk7CisgICAg
T3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2su
cmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRv
cHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksICEhbV9wcm9ncmFt
Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdD
b21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAg
IGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX3By
b2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJl
bGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7
CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCiAgICAgcHJvZ3JhbU5vZGUtPmRl
c3Ryb3lEYXRhKCk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4
ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAg
IGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29t
cGlsZWQgPSB0cnlERkdDb21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9q
aXRDb2RlRm9yQ2FsbCk7CisgICAgICAgIGlmIChkZmdDb21waWxlZCkgeworICAgICAgICAgICAg
aWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICBt
X3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBzdGF0
aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jay0+cmVs
ZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNo
YWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAg
fQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2Vu
ZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVC
bG9jay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJs
b2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
KTsKICAgICB9CiAjZW5kaWYKIApAQCAtMzQ2LDcgKzM5MywyOSBAQCB2b2lkIFByb2dyYW1FeGVj
dXRhYmxlOjpjbGVhckNvZGUoKQogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCi1KU09iamVj
dCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFy
Z3NFeGVjKQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZv
ckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4
ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwp
OworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+
Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBj
b21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhl
YywgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkp
KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIHJldHVybiBlcnJvcjsK
K30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNv
bnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
K3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwor
ICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBKU09iamVjdCogZXJy
b3IgPSAwOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpICE9
IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3Ry
dWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCog
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NF
eGVjLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlv
biA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmds
b2JhbERhdGE7CkBAIC0zNjIsMTEgKzQzMSwxMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2Nv
cGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFTU0VSVCghbV9jb2RlQmxv
Y2tGb3JDYWxsKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rp
b25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnBy
b3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7Ci0gICAgT3duUHRyPEJ5
dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9y
KGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRh
YmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2Nr
PiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxlYXNlKCk7CisgICAg
QVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3Vz
Q29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rp
b25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnBy
b3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlLCBwcmV2aW91c0NvZGVCbG9j
ay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihh
ZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUs
IG1fY29kZUJsb2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdl
dCgpLCAhIW1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJh
dG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21w
aWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkp
IHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJs
b2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29k
ZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0
cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTM3NywxNyAr
NDQ3LDMwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBt
X3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOwog
CiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmNvcHlE
YXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5n
bG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRy
eURGR0NvbXBpbGVGdW5jdGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JD
YWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2spOwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVk
ID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAg
ICAgICAgIGRmZ0NvbXBpbGVkID0gdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKGV4ZWMsIGNhbGxlZUFy
Z3NFeGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIG1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGlmIChkZmdDb21waWxlZCkgewor
ICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCktPnVubGlua0luY29t
aW5nQ2FsbHMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9j
a0ZvckNhbGwtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNhbGwgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9j
a0ZvckNhbGwtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N5bWJv
bFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2Rl
Rm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLQor
ICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0
ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9jb2Rl
QmxvY2tGb3JDYWxsLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAg
ICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oY2FsbGVlQXJnc0V4ZWMpOwpAQCAtNDA3LDggKzQ5MCwxMCBAQCBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
KQogeworICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKKyAgICAKICAgICBKU09iamVjdCogZXhj
ZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9k
ZS0+Z2xvYmFsRGF0YTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2Jh
bERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1v
ZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKQEAgLTQy
MywxMSArNTA4LDEyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IK
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xv
YmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7
Ci0gICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2Rl
QmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVy
KCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRydWUpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVH
ZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5n
ZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJs
ZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJs
b2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnJlbGVhc2Uo
KTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAh
cHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQ
dHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCB0cnVlLCBwcmV2
aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+
IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2Nv
cGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0
ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBC
eXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlv
biA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuY2xlYXIoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+
cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTQzOCwxNCArNTI0LDI5IEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0g
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5
LT5kZXN0cm95RGF0YSgpOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZy
b21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFs
RGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJ
VDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuZ2V0KCksICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAg
ICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQg
cG9zc2libGUgdG8gY29tcGlsZSBjb25zdHJ1Y3RvcnMgd2l0aCBERkcuCisgICAgICAgIGlmIChk
ZmdDb21waWxlZCkgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5h
bHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5h
bHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsK
KyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVy
X2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNl
QWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsK
KyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5
dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAK
KyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNldEpJVENvZGUobV9qaXRDb2RlRm9y
Q29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CiAgICAgfQog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsMTAgKzMwMywxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAg
aWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7CiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAK
ICAgICAgICAgRXZhbENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBA
IC0zNDAsNyArMzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRF
eGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0
YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6
OkpJVFR5cGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOwogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKQEAgLTM2NCwxMSArMzY2LDEzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5k
eW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAg
ICAgICAgICAgICBpZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJv
ciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAg
ICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9n
cmFtQ29kZUJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisg
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CisKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQog
ICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTM5
OCw3ICs0MDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1
dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3Rh
dGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRl
cm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29t
cGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlw
ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAg
ICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIApAQCAtNDQzLDExICs0NDcsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNH
bG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAg
ICAgIGlmICghbV9jb2RlQmxvY2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMp
OworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBz
Y29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNT
dGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9y
Q2FsbCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0Zv
ckNhbGw7CkBAIC00NjQsMTEgKzQ3MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAg
ICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJ
bnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBj
b21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9
CiAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29u
c3RydWN0KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0OwpAQCAtNDk0LDYgKzUwMiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBjb21waWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRG
b3IoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcGls
ZU9wdGltaXplZEZvciBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhIGNhbGxmcmFtZSBzZXQg
dXAgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBt
YWtlIHNwZWN1bGF0aXZlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlIGFyZ3VtZW50cy4KKyAg
ICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhl
Yy0+Y2FsbGVlKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAgICAgICAgICAg
IEFTU0VSVChhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhp
cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQor
ICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29w
ZUNoYWluTm9kZSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29u
c3RydWN0KTsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc0dlbmVy
YXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtNTQyLDggKzU2NCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2VzQXJndW1l
bnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBib29sLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExp
bmUpOwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBG
dW5jdGlvblBhcmFtZXRlcnMqLCBib29sLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwog
Ci0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyk7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpK
SVRUeXBlKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICAK
ICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAg
ICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzIDogMzE7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0RvdWJseUxpbmtlZFNlbnRpbmVsTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRG91Ymx5TGlua2VkU2VudGluZWxMaXN0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RvdWJseUxpbmtlZFNlbnRp
bmVsTGlzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0X2gKKyNkZWZpbmUgRG91Ymx5TGlua2VkU2Vu
dGluZWxMaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKy8vIEEgZG91Ymx5
LWxpbmtlZCBzZW50aW5lbCBsaXN0IGFsbG93cyBmb3IgdGhlIHJlbW92YWwgb2YgYSBub2RlIGRp
cmVjdGx5LAorLy8gd2l0aG91dCBoYXZpbmcgYW55IG90aGVyIHBvaW50ZXJzIGludG8gdGhlIGxp
c3QuIEl0IGFsc28gcmVxdWlyZXMgZm91cgorLy8gd29yZHMsIHJhdGhlciB0aGFuIHR3bywgb2Yg
b3ZlcmhlYWQgaW4gdGhlIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdAorLy8gc3RydWN0dXJlLiBB
bHNvIHVubGlrZSB0aGUgRG91Ymx5TGlua2VkTGlzdCwgdGhlIGZvcm1hdCBvZiBuZXh0L3ByZXYK
Ky8vIGxpbmtzIGlzIHByZWRldGVybWluZWQgaW4gdGhlIERvdWJseUxpbmtlZFNlbnRpbmVsTGlz
dE5vZGUgY2xhc3MuCisvLyBGaW5hbGx5LCBpdCBkaWZmZXJzIGZyb20gU2VudGluZWxMaW5rZWRM
aXN0IGJ5IGVuc3VyaW5nIHRoYXQgdGhlCisvLyBzZW50aW5lbHMgb25seSBoYXZlIG5leHQvcHJl
diBwb2ludGVycyBpbnN0ZWFkIG9mIHRoZSBmdWxsIGNvbnRlbnRzIG9mCisvLyB0aGUgbm9kZSBz
dHJ1Y3R1cmUuIFRoaXMgbWFrZXMgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0IGdyZWF0IGZvciBj
YXNlcworLy8gd2hlcmUgdGhlIG5vZGVzIGFyZSBsYXJnZS4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudCBUIHNob3VsZCBiZSBhIHN1YmNsYXNzIG9mIERvdWJs
eUxpbmtlZFNlbnRpbmVsTGlzdE5vZGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRG91
Ymx5TGlua2VkU2VudGluZWxMaXN0Tm9kZSB7CitwdWJsaWM6CisgICAgRG91Ymx5TGlua2VkU2Vu
dGluZWxMaXN0Tm9kZSgpOworICAgIAorICAgIHZvaWQgc2V0UHJldihUKik7CisgICAgdm9pZCBz
ZXROZXh0KFQqKTsKKyAgICAKKyAgICBUKiBwcmV2KCkgY29uc3Q7CisgICAgVCogbmV4dCgpIGNv
bnN0OworICAgIAorICAgIHZvaWQgcmVtb3ZlKCk7CisgICAgdm9pZCBwcmVwZW5kKFQqKTsKKyAg
ICB2b2lkIGFwcGVuZChUKik7CisgICAgCisgICAgYm9vbCBpc09uTGlzdCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoISFtX3ByZXYgPT0gISFtX25leHQpOworICAgICAgICByZXR1cm4g
ISFtX3ByZXY7CisgICAgfQorCitwcml2YXRlOgorICAgIFQqIG1fcHJldjsKKyAgICBUKiBtX25l
eHQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRG91Ymx5TGlua2VkU2VudGlu
ZWxMaXN0Tm9kZTxUPjo6RG91Ymx5TGlua2VkU2VudGluZWxMaXN0Tm9kZSgpCit7CisgICAgc2V0
UHJldigwKTsKKyAgICBzZXROZXh0KDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgdm9pZCBEb3VibHlMaW5rZWRTZW50aW5lbExpc3ROb2RlPFQ+OjpzZXRQcmV2KFQqIHByZXYp
Cit7CisgICAgbV9wcmV2ID0gcHJldjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHZvaWQgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0Tm9kZTxUPjo6c2V0TmV4dChUKiBuZXh0KQor
eworICAgIG1fbmV4dCA9IG5leHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBEb3VibHlMaW5rZWRTZW50aW5lbExpc3ROb2RlPFQ+OjpwcmV2KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcmV2OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogRG91Ymx5
TGlua2VkU2VudGluZWxMaXN0Tm9kZTxUPjo6bmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bmV4dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRG91Ymx5TGlua2Vk
U2VudGluZWxMaXN0Tm9kZTxUPjo6cmVtb3ZlKCkKK3sKKyAgICBBU1NFUlQoaXNPbkxpc3QoKSk7
CisgICAgcHJldigpLT5zZXROZXh0KG5leHQoKSk7CisgICAgbmV4dCgpLT5zZXRQcmV2KHByZXYo
KSk7CisgICAgc2V0TmV4dCgwKTsKKyAgICBzZXRQcmV2KDApOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBEb3VibHlMaW5rZWRTZW50aW5lbExpc3ROb2RlPFQ+OjphcHBl
bmQoVCogbm9kZSkKK3sKKyAgICBBU1NFUlQoISFtX25leHQpOworICAgIEFTU0VSVCghbm9kZS0+
aXNPbkxpc3QoKSk7CisgICAgbm9kZS0+c2V0UHJldihzdGF0aWNfY2FzdDxUKj4odGhpcykpOwor
ICAgIG5vZGUtPnNldE5leHQobmV4dCgpKTsKKyAgICBuZXh0KCktPnNldFByZXYobm9kZSk7Cisg
ICAgc2V0TmV4dChub2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQg
RG91Ymx5TGlua2VkU2VudGluZWxMaXN0Tm9kZTxUPjo6cHJlcGVuZChUKiBub2RlKQoreworICAg
IEFTU0VSVCghIW1fcHJldik7CisgICAgQVNTRVJUKCFub2RlLT5pc09uTGlzdCgpKTsKKyAgICBu
b2RlLT5zZXROZXh0KHN0YXRpY19jYXN0PFQqPih0aGlzKSk7CisgICAgbm9kZS0+c2V0UHJldihw
cmV2KCkpOworICAgIHByZXYoKS0+c2V0TmV4dChub2RlKTsKKyAgICBzZXRQcmV2KG5vZGUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEb3VibHlMaW5rZWRTZW50aW5lbExpc3Qg
eworcHVibGljOgorICAgIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdCgpOworICAgIAorICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7IC8vIFRoaXMgaXMg
TyhuKS4KKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBUKiBoZWFkKCkgY29uc3Q7CisgICAgVCog
cmVtb3ZlSGVhZCgpOworCisgICAgY29uc3QgVCogaGVhZFNlbnRpbmVsKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KCZtX2hlYWRTZW50aW5lbCk7IH0KKyAgICBjb25zdCBU
KiB0YWlsU2VudGluZWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUKj4oJm1f
dGFpbFNlbnRpbmVsKTsgfQorICAgIFQqIGhlYWRTZW50aW5lbCgpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PFQqPigmbV9oZWFkU2VudGluZWwpOyB9CisgICAgVCogdGFpbFNlbnRpbmVsKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VCo+KCZtX3RhaWxTZW50aW5lbCk7IH0KKyAgICAKKyAgICB2b2lkIGFw
cGVuZChUKik7CisgICAgdm9pZCByZW1vdmUoVCopOworCitwcml2YXRlOgorICAgIERvdWJseUxp
bmtlZFNlbnRpbmVsTGlzdE5vZGU8VD4gbV9oZWFkU2VudGluZWw7CisgICAgRG91Ymx5TGlua2Vk
U2VudGluZWxMaXN0Tm9kZTxUPiBtX3RhaWxTZW50aW5lbDsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBEb3VibHlMaW5rZWRTZW50aW5lbExpc3Q8VD46OkRvdWJseUxpbmtlZFNl
bnRpbmVsTGlzdCgpCit7CisgICAgY2xlYXIoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIGJvb2wgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0PFQ+Ojppc0VtcHR5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaGVhZCgpICE9IHRhaWxTZW50aW5lbCgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgc2l6ZV90IERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdDxUPjo6c2l6
ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IHNpemUgPSAwOworICAgIGZvciAoVCogbm9kZSA9IGhl
YWQoKTsgbm9kZSAhPSB0YWlsU2VudGluZWwoKTsgbm9kZSA9IG5vZGUtPm5leHQoKSkKKyAgICAg
ICAgKytzaXplOworICAgIHJldHVybiBzaXplOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdm9pZCBEb3VibHlMaW5rZWRTZW50aW5lbExpc3Q8VD46OmNsZWFyKCkKK3sKKyAgICBo
ZWFkU2VudGluZWwoKS0+c2V0TmV4dCh0YWlsU2VudGluZWwoKSk7CisgICAgdGFpbFNlbnRpbmVs
KCktPnNldFByZXYoaGVhZFNlbnRpbmVsKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgVCogRG91Ymx5TGlua2VkU2VudGluZWxMaXN0PFQ+OjpoZWFkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGVhZFNlbnRpbmVsKCktPm5leHQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0PFQ+OjphcHBlbmQoVCogbm9k
ZSkKK3sKKyAgICB0YWlsU2VudGluZWwoKS0+cHJlcGVuZChub2RlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRG91Ymx5TGlua2VkU2VudGluZWxMaXN0PFQ+OjpyZW1v
dmUoVCogbm9kZSkKK3sKKyAgICBub2RlLT5yZW1vdmUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFQqIERvdWJseUxpbmtlZFNlbnRpbmVsTGlzdDxUPjo6cmVtb3ZlSGVhZCgp
Cit7CisgICAgVCogcmVzdWx0ID0gaGVhZCgpOworICAgIGlmIChyZXN1bHQgPT0gdGFpbFNlbnRp
bmVsKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJlc3VsdC0+cmVtb3ZlKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RG91Ymx5
TGlua2VkU2VudGluZWxMaXN0Tm9kZTsKK3VzaW5nIFdURjo6RG91Ymx5TGlua2VkU2VudGluZWxM
aXN0OworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDk0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NTQsNiArOTU0LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9ERkdfSklU
IDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTikgJiYg
RU5BQkxFKERGR19KSVQpCisjZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMAorI2Vu
ZGlmCisKIC8qIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBKU1ZBTFVFNjQsIG9ubHkg
dGVzdGVkIG9uIFBMQVRGT1JNKE1BQykgKi8KICNpZiAhZGVmaW5lZChFTkFCTEVfVkFMVUVfUFJP
RklMRVIpICYmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpICYmIFBMQVRGT1JNKE1BQykK
ICNkZWZpbmUgRU5BQkxFX1ZBTFVFX1BST0ZJTEVSIDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105733</attachid>
            <date>2011-08-30 20:37:04 -0700</date>
            <delta_ts>2011-09-02 19:50:03 -0700</delta_ts>
            <desc>the patch - fix review</desc>
            <filename>tiering_patch_3.diff</filename>
            <type>text/plain</type>
            <size>60359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxNDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA5IEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRlZCB0aGUg
bm90aW9uIHRoYXQgYW4gZXhlY3V0YWJsZSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIENvZGVCbG9j
aworICAgICAgICBmb3IgYSBwYXJ0aWN1bGFyIHJvbGUuIENvZGVCbG9ja3MgZm9ybSBsaW5rZWQg
bGlzdHMsIG9yZGVyZWQgaW4KKyAgICAgICAgZGVzY2VuZGluZyB0ZWFyIChzbyBpZiB0aGUgY29k
ZSBpcyBvcHRpbWl6ZWQsIHRoZSBmaXJzdCBDb2RlQmxvY2sKKyAgICAgICAgd2lsbCBiZSBERkcg
YW5kIHRoZSBzZWNvbmQgd2lsbCBiZSB0aGUgb2xkIEpJVCkuIFRoZSBvbGQgSklUIGhhcworICAg
ICAgICBleGVjdXRpb24gY291bnRlcnMgZm9yIGVhY2ggQ29kZUJsb2NrLCB3aGljaCBkZWNpZGUg
d2hlbiB0byB0aWVyIHVwLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbGwgZGlzYWJsZWQg
YnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIG5vdCB5ZXQgYSBwZXJmb3JtYW5jZQorICAgICAgICB3
aW4uICBXaGVuIGRpc2FibGVkIGl0IGlzIHBlcmZvcm1hbmNlLW5ldXRyYWwuCisKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rQ2FsbHMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNsZWFyRXZhbENhY2hlKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZUV4aXN0aW5nRW50cmllcyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2Rl
QmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6Y29t
cGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRp
bWl6ZWQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlbGVhc2VBbHRl
cm5hdGl2ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzSW5jb21pbmdDYWxscyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6c2V0SklUQ29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0SklU
Q29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0SklUVHlwZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Okds
b2JhbENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNv
ZGVCbG9jazo6UHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6
OkV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rp
b25Db2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGluayk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmRmZ0xpbmtGb3IpOgorICAgICAgICAqIGhlYXAvSGFuZGxlSGVhcC5oOgorICAgICAgICAoSlND
OjpIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRUaW1lb3V0Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToK
KyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklU
Q2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGppdC9K
SVRDb2RlLmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjpib3R0b21UaWVySklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6dG9wVGll
ckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om5leHRUaWVySklUKToKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6Cisg
ICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAg
ICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpT
Qzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpQ
cm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdCk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFs
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29t
cGlsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGwp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3Ip
OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9TZW50aW5lbExpbmtl
ZExpc3QuaDoKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OkJhc2ljUmF3U2Vu
dGluZWxOb2RlKToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnNldFByZXYp
OgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0TmV4dCk6CisgICAgICAg
IChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpwcmV2KToKKyAgICAgICAgKFdURjo6QmFzaWNS
YXdTZW50aW5lbE5vZGU6Om5leHQpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTo6aXNPbkxpc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6Ojo6
U2VudGluZWxMaW5rZWRMaXN0KToKKyAgICAgICAgKFdURjo6OjpiZWdpbik6CisgICAgICAgIChX
VEY6Ojo6ZW5kKToKKyAgICAgICAgKFdURjo6OjpwdXNoKToKKwogMjAxMS0wOC0zMCAgQWFyb24g
Q29sd2VsbCAgPGFjb2x3ZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgTWVkaWFTb3Vy
Y2UgQVBJIHRvIEhUTUxNZWRpYUVsZW1lbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlz
aW9uIDk0MTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEsMTcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNv
bmQpKSk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29u
ZCwgVHJ1c3RlZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworI2lmIENQ
VShYODZfNjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgWDg2UmVn
aXN0ZXJzOjpyMTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpy
MTEpKTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRl
c3QubV9wdHIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4
ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3Vs
dENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAg
ICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDE0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDkg
KzE0MDEsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQog
Ci1Db2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0
LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCitDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVU
eXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3Zp
ZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSog
c3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5h
dGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBv
d25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291bnRlcigtMTApCiAgICAg
LCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251
bVBhcmFtZXRlcnMoMCkKQEAgLTE0MjIsNiArMTQyMyw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAg
ICwgbV9zb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1U
YWIpCisgICAgLCBtX2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQogewogICAgIEFTU0VSVChtX3Nv
dXJjZSk7CiAKQEAgLTE0NDgsNiArMTQ1MCwxNCBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQog
ICAgICAgICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkNlbGwoKSk7CiAgICAgfQogI2Vu
ZGlmCisgICAgCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0
aGVyZSBhcmUgaW5jb21pbmcgY2FsbHMuIEJ1dAorICAgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGR1
cmluZyBoZWFwIGRlc3RydWN0aW9uLCB0aGVuIHRoZXJlIG1heSBzdGlsbCBiZQorICAgIC8vIGlu
Y29taW5nIGNhbGxzLCB3aGljaCBpcyBoYXJtbGVzcy4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQg
b3VyIG91dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3Mn
CisgICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRp
b24gb2YgdGhlIH5DYWxsTGlua0luZm8KKyAgICAvLyBkZXN0cnVjdG9ycy4KIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUo
KSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC0xNTE1LDYgKzE1MjUsOCBAQCB2b2lkIEV2YWxD
b2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBpZiAoISFtX2FsdGVybmF0aXZl
KQorICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX293
bmVyRXhlY3V0YWJsZSk7CiAgICAgaWYgKG1fcmFyZURhdGEpIHsKQEAgLTE3MjcsOCArMTczOSwz
MCBAQCB2b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbihDYWxsRnJhCiB9CiAgICAgCiAj
aWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKQoreworICAgIEFTU0VSVChp
c0xpbmtlZCgpKTsKKyAgICAKKyAgICBpZiAoaXNERkcpIHsKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChjYWxsUmV0dXJu
TG9jYXRpb24pLCBpc0NhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25z
dHJ1Y3QpOworI2Vsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNh
bGwoY2FsbFJldHVybkxvY2F0aW9uKSwgaXNDYWxsPyBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlW
aXJ0dWFsQ2FsbExpbmsoKSA6IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1
Y3RMaW5rKCkpOworICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CisgICAgY2FsbGVl
LmNsZWFyKCk7CisKKyAgICAvLyBJdCB3aWxsIGJlIG9uIGEgbGlzdCBpZiB0aGUgY2FsbGVlIGhh
cyBhIGNvZGUgYmxvY2suCisgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIHJlbW92ZSgpOwor
fQorCiB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMoKQogeworICAgIGlmICghIW1fYWx0ZXJu
YXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnVubGlua0NhbGxzKCk7CiAgICAgaWYgKCEo
bV9jYWxsTGlua0luZm9zLnNpemUoKSB8fCBtX21ldGhvZENhbGxMaW5rSW5mb3Muc2l6ZSgpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9nbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKQEAg
LTE3MzcsMjQgKzE3NzEsODkgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IGkrKykgewogICAg
ICAgICBpZiAoIW1fY2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCkgewotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0
aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3Bl
cmF0aW9uTGlua0NvbnN0cnVjdCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVy
bkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
VmlydHVhbENvbnN0cnVjdExpbmsoKSk7Ci0gICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxp
bmsoKTsKKyAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVubGluaygqbV9nbG9iYWxEYXRhLCBy
ZXBhdGNoQnVmZmVyKTsKICAgICB9CiB9CisKK3ZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWlu
Z0NhbGxzKCkKK3sKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CisgICAg
d2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkK
KyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqbV9nbG9iYWxEYXRhLCBy
ZXBhdGNoQnVmZmVyKTsKK30KICNlbmRpZgogCiB2b2lkIENvZGVCbG9jazo6Y2xlYXJFdmFsQ2Fj
aGUoKQogeworICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUt
PmNsZWFyRXZhbENhY2hlKCk7CiAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICByZXR1cm47
CiAgICAgbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLmNsZWFyKCk7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKFZlY3RvcjxU
PiYgdGFyZ2V0LCBWZWN0b3I8VD4mIHNvdXJjZSkKK3sKKyAgICBBU1NFUlQodGFyZ2V0LnNpemUo
KSA8PSBzb3VyY2Uuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldC5z
aXplKCk7ICsraSkKKyAgICAgICAgdGFyZ2V0W2ldID0gc291cmNlW2ldOworfQorCit2b2lkIENv
ZGVCbG9jazo6Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKQoreworICAgIGlmICghbV9hbHRlcm5h
dGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMo
bV9jb25zdGFudFJlZ2lzdGVycywgbV9hbHRlcm5hdGl2ZS0+bV9jb25zdGFudFJlZ2lzdGVycyk7
CisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0aW9uRGVjbHMsIG1fYWx0ZXJuYXRp
dmUtPm1fZnVuY3Rpb25EZWNscyk7CisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0
aW9uRXhwcnMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25FeHBycyk7Cit9CisKKy8vIEZJWE1F
OiBJbXBsZW1lbnQgT1NSLiBJZiBjb21waWxlT3B0aW1pemVkKCkgaXMgY2FsbGVkIGZyb20gc29t
ZXdoZXJlIG90aGVyIHRoYW4gdGhlCisvLyBlcGlsb2d1ZSwgZG8gT1NSIGZyb20gdGhlIG9sZCBj
b2RlIGJsb2NrIHRvIHRoZSBuZXcgb25lLgorCisvLyBGSVhNRTogQWZ0ZXIgZG9pbmcgc3VjY2Vz
c2Z1bCBvcHRpbWl6ZWQgY29tcGlsYXRpb24sIHJlc2V0IHRoZSBwcm9maWxpbmcgY291bnRlciB0
byAtMSwgc28KKy8vIHRoYXQgdGhlIG5leHQgZXhlY3V0aW9uIG9mIHRoZSBvbGQgY29kZSBibG9j
ayB3aWxsIGp1bXAgc3RyYWlnaHQgaW50byBjb21waWxlT3B0aW1pemVkKCkKKy8vIGFuZCBwZXJm
b3JtIE9TUi4KKworLy8gRklYTUU6IEVuc3VyZSB0aGF0IGEgY2FsbCB0byBjb21waWxlT3B0aW1p
emVkKCkganVzdCBkb2VzIE9TUiAoYW5kIHJlc2V0cyB0aGUgY291bnRlciB0byAtMSkKKy8vIGlm
IHRoZSBjb2RlIGhhZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQuCisKK0NvZGVCbG9jayogUHJvZ3Jh
bUNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8UHJv
Z3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7
Cit9CisKK0NvZGVCbG9jayogRXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdl
bmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJl
cGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IobV9pc0NvbnN0cnVj
dG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KKworSlNPYmplY3QqIFBy
b2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwor
fQorCitKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFj
ZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUo
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZUNo
YWluTm9kZSk7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sK
KyAgICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVy
SklUKGdldEpJVFR5cGUoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRp
bWl6ZWRGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JD
b25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTQx
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC05NywxMiArOTgsMTkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RydWN0IENhbGxMaW5rSW5mbyB7
CisgICAgc3RydWN0IENhbGxMaW5rSW5mbzogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPENh
bGxMaW5rSW5mbz4gewogICAgICAgICBDYWxsTGlua0luZm8oKQogICAgICAgICAgICAgOiBoYXNT
ZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKICAgICAgICAgICAgICwgaXNDYWxsKGZhbHNlKQorICAg
ICAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB+Q2FsbExpbmtJbmZvKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzT25M
aXN0KCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlKCk7CisgICAgICAgIH0KIAogICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb247IC8vIGl0J3MgYSBuZWFyIGNhbGwg
aW4gdGhlIG9sZCBKSVQsIG9yIGEgbm9ybWFsIGNhbGwgaW4gREZHCiAgICAgICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CkBAIC0xMTAsMTMgKzExOCwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsK
ICAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAgICAgICAgIGJvb2wgaXND
YWxsIDogMTsKKyAgICAgICAgYm9vbCBpc0RGRyA6IDE7CiAKICAgICAgICAgYm9vbCBpc0xpbmtl
ZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQotICAgICAgICB2b2lkIHVubGluaygpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBj
YWxsZWUuY2xlYXIoKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHVubGluayhKU0dsb2JhbERh
dGEmLCBSZXBhdGNoQnVmZmVyJik7CiAKICAgICAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgICAg
IHsKQEAgLTIwOSwxMyArMjE0LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IENvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1
bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgYm9vbCBpc0Nv
bnN0cnVjdG9yKTsKKyAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqLCBib29sIGlzQ29uc3Ry
dWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3Jp
dGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgSGVhcCog
bV9oZWFwOwogCiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Db2RlQmxvY2soKTsKKyAg
ICAgICAgCisgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVy
bmF0aXZlLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0
ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQogCiAgICAgICAg
IHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKIApAQCAtMjc3LDYgKzI4NSwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMo
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaGFzSW5jb21pbmdDYWxscygpIHsgcmV0dXJuIG1f
aW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKTsgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxMaW5rSW5mbyogaW5jb21pbmcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTI5OCw4ICszMTUsMTggQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIEpJVENv
ZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2lzQ29uc3RydWN0b3IgPyBvd25lckV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpIDogb3duZXJFeGVjdXRhYmxlKCkt
PmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCk7IH0KKyAgICAgICAgdm9pZCBzZXRKSVRDb2RlKGNv
bnN0IEpJVENvZGUmIGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hl
Y2spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7CisgICAgICAgICAg
ICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVjazsKKyAgICAgICAg
fQorICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9Cisg
ICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIG1faml0Q29kZS5q
aXRUeXBlKCk7IH0KICAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGV4ZWN1dGFibGVQb29sKCkgeyBy
ZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVQb29sKCk7IH0KKyAgICAgICAgdmlydHVh
bCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
ID0gMDsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOworI2Vs
c2UKKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gSklUQ29k
ZTo6QmFzZWxpbmVKSVQ7IH0KICNlbmRpZgogCiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9
CkBAIC01MzMsNiArNTYwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBFdmFsQ29kZUNh
Y2hlJiBldmFsQ29kZUNhY2hlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVy
biBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGU7IH0KIAogICAgICAgICB2b2lkIHNocmlua1Rv
Rml0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7
CisgICAgICAgIAorICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTE7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKIAogICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgogCkBAIC01OTIsNiArNjI4
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxHbG9iYWxSZXNvbHZlSW5mbz4g
bV9nbG9iYWxSZXNvbHZlSW5mb3M7CiAgICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2Fs
bExpbmtJbmZvczsKICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxMaW5rSW5mbz4gbV9tZXRob2RD
YWxsTGlua0luZm9zOworICAgICAgICBKSVRDb2RlIG1faml0Q29kZTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOworICAgICAgICBTZW50aW5l
bExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0lu
Zm8+ID4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmls
ZXM7CkBAIC02MDgsNiArNjQ3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3ltYm9s
VGFibGUqIG1fc3ltYm9sVGFibGU7CiAKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRl
cm5hdGl2ZTsgLy8gRklYTUUgbWFrZSB0aGlzIGRvIHNvbWV0aGluZworCiAgICAgICAgIHN0cnVj
dCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAg
ICBwdWJsaWM6CkBAIC02NDQsOSArNjg1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gcmVz
cG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCiAKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBw
dWJsaWMgQ29kZUJsb2NrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdsb2JhbENvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0KQotICAgICAgICAgICAgOiBDb2RlQmxv
Y2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRl
ciwgc291cmNlT2Zmc2V0LCAmbV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSkKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAg
ICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNv
dXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNl
LCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTY1NiwxNiArNjk3LDIy
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1Ymxp
YyBHbG9iYWxDb2RlQmxvY2sgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9j
ayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1
dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAg
ICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFs
dGVybmF0aXZlKQorICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUp
CiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKTsKKyNlbmRpZgogICAgIH07CiAKICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrIDog
cHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsQ29kZUJs
b2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQg
YmFzZVNjb3BlRGVwdGgpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1
dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAg
ICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5h
dGl2ZSkKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZh
bENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQogICAg
ICAgICAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGJhc2VTY29wZURlcHRoKQogICAgICAgICB7CiAg
ICAgICAgIH0KQEAgLTY3OSw2ICs3MjYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIG1fdmFyaWFibGVz
LnN3YXAodmFyaWFibGVzKTsKICAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1f
YmFzZVNjb3BlRGVwdGg7CkBAIC02OTEsMTQgKzc0NCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgLy8gYXMgd2UgbmVlZCB0byBpbml0aWFsaXNlIHRoZSBDb2RlQmxvY2sgYmVmb3JlIHdl
IGNvdWxkIGluaXRpYWxpc2UgYW55IFJlZlB0ciB0byBob2xkIHRoZSBzaGFyZWQKICAgICAgICAg
Ly8gc3ltYm9sIHRhYmxlLCBzbyB3ZSBqdXN0IHBhc3MgYXMgYSByYXcgcG9pbnRlciB3aXRoIGEg
cmVmIGNvdW50IG9mIDEuICBXZSB0aGVuIG1hbnVhbGx5IGRlcmVmCiAgICAgICAgIC8vIGluIHRo
ZSBkZXN0cnVjdG9yLgotICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1
bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIDog
Q29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNl
UHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpLmxlYWtS
ZWYoKSwgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92
aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25Q
dHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVy
RXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJj
ZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1
Y3RvciwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB+RnVuY3Rp
b25Db2RlQmxvY2soKQogICAgICAgICB7CiAgICAgICAgICAgICBzaGFyZWRTeW1ib2xUYWJsZSgp
LT5kZXJlZigpOwogICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOworI2VuZGlmCiAgICAgfTsKIAogICAgIGlubGluZSBSZWdpc3RlciYgRXhlY1N0
YXRlOjpyKGludCBpbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDE0NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6cHJlc2VydmVMYXN0VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdp
c3RlcnMubGFzdCgpOwogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
UHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2Rl
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQ
cm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktp
bmQpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVj
dC0+ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWlu
LT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRS
aWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJj
ZUluZm8oKSkKQEAgLTIyOCw2ICsyMjgsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoUHJvCiAgICAgCiAgICAgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9IDE7
IC8vIEFsbG9jYXRlIHNwYWNlIGZvciAidGhpcyIKICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVy
ZWRWYXJzID0gY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgCisgICAgaWYgKGNvbXBpbGF0aW9u
S2luZCA9PSBPcHRpbWl6aW5nQ29tcGlsYXRpb24pCisgICAgICAgIHJldHVybjsKIAogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0
KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBA
IC0yNTgsNyArMjYxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBy
bwogICAgIH0KIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0
RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBt
X3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0
c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkBAIC00MTksNyArNDIy
LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgIH0KIH0K
IAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9k
ZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwg
RXZhbENvZGVCbG9jayogY29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxh
dGlvbktpbmQpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29w
ZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3Vs
ZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmlj
aFNvdXJjZUluZm8oKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0MTQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw5ICs5MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVt
cHNHZW5lcmF0ZWRDb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KCk7CiAKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWlu
Tm9kZSosIFN5bWJvbFRhYmxlKiwgUHJvZ3JhbUNvZGVCbG9jayopOwotICAgICAgICBCeXRlY29k
ZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJs
ZSosIENvZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNj
b3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKik7CisgICAgICAgIGVu
dW0gQ29tcGlsYXRpb25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0
aW9uIH07CisgICAgICAgIAorICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGls
YXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbktp
bmQpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2Rl
KiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKIAogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERh
dGE7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBj
b25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTQx
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTA1LDYgKzkwNSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5j
YWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxsID0gbV9qc0NhbGxzW2ldLm1faXND
YWxsOworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJu
TG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0Nh
bGxzW2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGlu
Zm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxz
W2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0
Y2guY3BwCShyZXZpc2lvbiA5NDE0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsOSBAQCB2b2lkIGRmZ0xp
bmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGluCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5j
YWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNv
ZGVCbG9jay0+bGlua0luY29taW5nQ2FsbCgmY2FsbExpbmtJbmZvKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDk0MTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNiArMjE4LDggQEAg
aW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVhcAogICAgIDogbV9oYW5kbGVI
ZWFwKGhhbmRsZUhlYXApCiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJD
b250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkBAIC0y
MjUsNiArMjI3LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aQog
ICAgIDogbV9oYW5kbGVIZWFwKDApCiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFr
T3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDE0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiAr
OTMsMTYgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogewogfQog
CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKK3ZvaWQgSklUOjplbWl0T3B0aW1pemF0
aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kIGtpbmQpCit7CisgICAgSnVtcCBza2lwT3B0
aW1pemUgPSBicmFuY2hBZGQzMihOb25aZXJvLCBUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRk
cmVzcygmbV9jb2RlQmxvY2stPm1fZXhlY3V0ZUNvdW50ZXIpKTsKKyAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IGN0aV9vcHRpbWl6
ZV9mcm9tX2xvb3AgOiBjdGlfb3B0aW1pemVfZnJvbV9yZXQpOworICAgIHN0dWJDYWxsLmNhbGwo
KTsKKyAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKK30KKyNlbmRpZgorCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKIHsKQEAgLTEwMiw2ICsx
MTIsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc3R1YkNhbGwuY2FsbCh0
aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CiAgICAgc3R1YkNhbGwuZ2V0QXJndW1lbnQoMCwgcmVnVDEs
IHJlZ1QwKTsgLy8gcmVsb2FkIGxhc3QgcmVzdWx0IHJlZ2lzdGVycy4KICAgICBza2lwVGltZW91
dC5saW5rKHRoaXMpOworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1p
emF0aW9uQ2hlY2spOwogfQogI2Vsc2UKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKQEAg
LTExMSw2ICsxMjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc2tpcFRp
bWVvdXQubGluayh0aGlzKTsKIAogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAK
KyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKIH0KICNl
bmRpZgogCkBAIC02MjMsNyArNjM3LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVQdHIqIGZ1bgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlB
cml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLQorICAgIAog
ICAgIHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7CiB9CiAKQEAgLTYzNyw2ICs2NTEsOSBAQCB2b2lkIEpJVDo6bGlua0ZvcihK
U0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xp
bmtlZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCpnbG9iYWxEYXRhLCBj
YWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LT5ob3RQYXRoT3RoZXIsIGNvZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVC
bG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxs
TGlua0luZm8pOwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBj
b250aW51ZSB0byB0cnkgdG8gbGluay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gOTQxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NzIsNiArOTcyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBM
b2FkcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcgaW50
byBkc3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAgICAKKyAgICAg
ICAgZW51bSBPcHRpbWl6YXRpb25DaGVja0tpbmQgeyBMb29wT3B0aW1pemF0aW9uQ2hlY2ssIFJl
dE9wdGltaXphdGlvbkNoZWNrIH07CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAg
ICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kKTsK
KyNlbHNlCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNo
ZWNrS2luZCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIHZvaWQgZW1pdFRpbWVvdXRD
aGVjaygpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFu
ZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gOTQxNDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw2ICsxMDYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZhcmFyZ3NTbG93Q2FzZShJ
CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7Cisg
ICAgCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
IAogICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTExOCw2ICsxMjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0
X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAg
CiAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICB1bnNpZ25lZCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDk0MTQ2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDIzICsyNyw1MCBAQAogI2RlZmluZSBKSVRDb2RlX2gKIAogI2lmIEVOQUJMRShKSVQpCi0K
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXIuaCIKKyNlbmRpZgog
CiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgY2xhc3MgSlNHbG9iYWxE
YXRhOwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKKyNlbmRpZgogICAgIAogICAgIGNsYXNzIEpJ
VENvZGUgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENv
ZGVQdHI7CisjZWxzZQorICAgICAgICBKSVRDb2RlKCkgeyB9CisjZW5kaWYKICAgICBwdWJsaWM6
CiAgICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJhc2VsaW5lSklULCBERkdK
SVQgfTsKLQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgp
CisgICAgICAgIHsKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICAgICAg
cmV0dXJuIEJhc2VsaW5lSklUOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7Cisj
ZW5kaWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgdG9wVGll
ckpJVCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIG5leHRUaWVySklUKEpJVFR5cGUgaml0
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqaXRUeXBlLCBqaXRU
eXBlID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0gREZHSklUKTsKKyAgICAgICAgICAgIHJl
dHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgSklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNTMsNyArODAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsK
ICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yICEoKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRk
cmVzcygpOwpAQCAtMTI0LDEwICsxNTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBD
b2RlUmVmIG1fcmVmOwogICAgICAgICBKSVRUeXBlIG1faml0VHlwZTsKKyNlbmRpZiAvLyBFTkFC
TEUoSklUKQogICAgIH07CiAKIH07CiAKICNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQxNDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTIsNiArNDUyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKElucwog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAg
IAogICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7CiAgICAgQVNTRVJUKHJl
Z1QxICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lz
dGVyICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQ3Miw2ICs0NzQsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3JldF9v
YmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVt
aXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgQVNT
RVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAgICBBU1NFUlQocmVnVDEgIT0gcmV0
dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgIT0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHJldmlzaW9uIDk0MTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiArMTgxNiwzMiBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcF9jaGVja19oYXNfCiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VO
RCgpOwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX2xvb3Ap
Cit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCog
ZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWlu
KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0
aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKK30KKworREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9yZXQpCit7CisgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
c3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZy
YW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNv
bXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3IpCisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZy
b20gcmV0IGZhaWxlZC5cbiIpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfaW5zdGFuY2VvZikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5
NDE0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIzLDYgKzQyMyw4IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIg
Y3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9t
X2xvb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRp
bWl6ZV9mcm9tX3JldChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVC
IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lk
KiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9qaXRDb21waWxlKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTQxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDggKzE3MCwxOCBA
QCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShFCiAgICAgZmluaXNoQ3Jl
YXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKIH0K
IAorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIEFTU0VSVChleGVj
LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9ldmFs
Q29kZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX2V2YWxDb2Rl
QmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVy
cm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0
VGllckpJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1f
ZXZhbENvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOworfQogCi1KU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVy
bmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRD
b2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTE4
NywyNiArMTk3LDQwIEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEK
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xv
YmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2V2YWxDb2RlQmxvY2spOwotICAgIG1f
ZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9i
amVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFpbk5vZGUtPmxvY2FsRGVwdGgoKSkp
OwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBC
eXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fZXZhbENv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpKSkpOworICAgIE93
blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9ldmFsQ29kZUJsb2NrLnJlbGVh
c2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9
PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5l
dyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwg
c2NvcGVDaGFpbk5vZGUtPmxvY2FsRGVwdGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgp
KSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFs
Q29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksICEhbV9ldmFs
Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdD
b21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAg
IGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX2V2
YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5h
dGl2ZSgpKTsKICAgICAgICAgZXZhbE5vZGUtPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVy
biBleGNlcHRpb247CiAgICAgfQogCiAgICAgZXZhbE5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAg
bV9ldmFsQ29kZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAg
IGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4ZWMsIG1fZXZhbENvZGVCbG9jay5n
ZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAg
ICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklU
Q29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4
ZWMsIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7CisgICAgICAgIGlm
IChkZmdDb21waWxlZCkKKyAgICAgICAgICAgIEFTU0VSVCghbV9ldmFsQ29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpIHx8ICFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmhhc0luY29taW5n
Q2FsbHMoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG1fZXZhbENvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGFscmVhZHkg
YW4gYWx0ZXJuYXRpdmUgcGllY2Ugb2YgY29kZSBjb21waWxlZCB3aXRoIGEgZGlmZmVyZW50Cisg
ICAgICAgICAgICAgICAgLy8gSklULCBzbyB3ZSBjYW4gc2lsZW50bHkgZmFpbC4KKyAgICAgICAg
ICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxv
Y2s+KG1fZXZhbENvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2Fs
bCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJs
b2NrLmdldCgpKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAg
ICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAg
ICAgICAgIG1fZXZhbENvZGVCbG9jay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAg
ICAgbV9ldmFsQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMjY1LDEwICsyODksMTkgQEAg
SlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheAogICAgIHJldHVybiBleGNl
cHRpb247CiB9CiAKLUpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmpl
Y3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogewotICAgIEFTU0VSVCghbV9wcm9ncmFt
Q29kZUJsb2NrKTsKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOworICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgSlNPYmplY3Qq
IGVycm9yID0gMDsKKyAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0g
SklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChl
eGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9wcm9ncmFtQ29kZUJs
b2NrLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOwor
ICAgIHJldHVybiBlcnJvcjsKK30KIAorSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK3sKICAgICBKU09iamVjdCogZXhjZXB0aW9u
ID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOwpAQCAtMjgxLDI1ICszMTQsMzkgQEAgSlNPYmplY3QqIFByb2dyYW1F
eGVjdXRhYmxlOjpjb21waWxlSW50ZQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgCi0gICAgbV9wcm9n
cmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFs
Q29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpKSk7Ci0gICAgT3duUHRyPEJ5
dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9y
KHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9s
VGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKSkpOworICAgIE93blB0cjxDb2RlQmxv
Y2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKTsKKyAg
ICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlv
dXNDb2RlQmxvY2spOworICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9n
cmFtQ29kZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJv
dmlkZXIoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVj
b2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHBy
b2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFi
bGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBC
eXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlv
biA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2Nr
LmNsZWFyKCk7CisgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRp
dmUoKSk7CiAgICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1
cm4gZXhjZXB0aW9uOwogICAgIH0KIAogICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOwor
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewot
ICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gdHJ5REZHQ29tcGlsZShleGVjLCBtX3Byb2dyYW1D
b2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwpOwotICAgICAgICBpZiAoIWRmZ0NvbXBp
bGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRU
eXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0gdHJ5REZH
Q29tcGlsZShleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwp
OworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChtX3Byb2dyYW1D
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSB7
CisgICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2
ZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2Jh
bERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIH0KICNpZiAhRU5BQkxF
KE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNH
ZW5lcmF0ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmRpc2NhcmRC
eXRlY29kZSgpOwogI2VuZGlmCisgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+c2V0SklUQ29k
ZShtX2ppdENvZGVGb3JDYWxsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgfQogI2Vu
ZGlmCiAKQEAgLTM0Niw3ICszOTMsMjkgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJD
b2RlKCkKICAgICBCYXNlOjpjbGVhckNvZGUoKTsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykKK0pTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0
ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxl
ZUFyZ3NFeGVjKQoreworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBKU09iamVj
dCogZXJyb3IgPSAwOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVFR5cGUoKSAh
PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJ
bnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6Om5l
eHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJU
KCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgQVNTRVJU
KGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBp
ZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BU
aWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4
ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QpOworICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6
SklUVHlwZSBqaXRUeXBlKQogewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwpAQCAt
MzYyLDExICs0MzEsMTIgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
cgogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5n
bG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ2FsbCk7Ci0g
ICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRo
aXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3Vy
Y2UoKS5zdGFydE9mZnNldCgpLCBmYWxzZSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRv
cj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBz
Y29wZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVC
bG9ja0ZvckNhbGwuZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2Rl
QmxvY2sgPSBtX2NvZGVCbG9ja0ZvckNhbGwucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlw
ZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7Cisg
ICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRo
aXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3Vy
Y2UoKS5zdGFydE9mZnNldCgpLCBmYWxzZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7
CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5
dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0Zv
ckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgISFtX2NvZGVC
bG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemlu
Z0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAg
ICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1f
Y29kZUJsb2NrRm9yQ2FsbC5jbGVhcigpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNhbGwt
PnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CkBAIC0zNzcsMTcgKzQ0NywzMCBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgbV9zeW1ib2xUYWJsZSA9
IG1fY29kZUJsb2NrRm9yQ2FsbC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKIAogICAgIGJvZHktPmRl
c3Ryb3lEYXRhKCk7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5jb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlRnVu
Y3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9q
aXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAg
aWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAg
ICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21w
aWxlZCA9IHRyeURGR0NvbXBpbGVGdW5jdGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2Rl
QmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2spOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlm
IChtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9j
b2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRl
cm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDYWxsLT5yZWxl
YXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29k
ZUJsb2NrRm9yQ2FsbC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6
OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ2FsbC5n
ZXQoKSwgJm1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0KKyAgICAgICAgfQogI2lm
ICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9y
OjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+
ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2spOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxlZUFyZ3NF
eGVjKTsKQEAgLTQwNyw4ICs0OTAsMTAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBVTlVT
RURfUEFSQU0oaml0VHlwZSk7CisgICAgCiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7
CiAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXIt
PnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwg
MCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNl
U3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CkBAIC00MjMsMTEgKzUwOCwxMiBA
QCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQo
KTsKIAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1
bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5z
dGFydE9mZnNldCgpLCB0cnVlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5l
cmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hh
aW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QuZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXND
b2RlQmxvY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5yZWxlYXNlKCk7CisgICAgQVNTRVJU
KChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJs
b2NrKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlv
bkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJv
dmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgdHJ1ZSwgcHJldmlvdXNDb2RlQmxvY2su
cmVsZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRv
cHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuZ2V0KCksICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkgPyBC
eXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0
b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3It
PmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7
CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxG
dW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5h
dGl2ZSgpKTsKICAgICAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKICAgICB9CkBAIC00MzgsMTQgKzUyNCwyOSBAQCBKU09iamVjdCogRnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURhdGEo
KTsKKyAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUo
KTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VK
SVQoKSkgewotICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBKSVQ6OmNvbXBpbGUoc2Nv
cGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAm
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICBib29sIGRmZ0Nv
bXBpbGVkID0gZmFsc2U7CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGNv
bXBpbGUgY29uc3RydWN0b3JzIHdpdGggREZHLgorICAgICAgICBpZiAoZGZnQ29tcGlsZWQpIHsK
KyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSkK
KyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKS0+
dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9u
Q29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVybmF0aXZlKCkp
OworICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGls
ZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0
KCksICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIH0KICNp
ZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRv
cjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwogICAgIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5
NDE0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAzLDEwICszMDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9ldmFsQ29k
ZUJsb2NrKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChl
eGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAg
ICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2V2YWxDb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0
dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogCiAgICAgICAgIEV2YWxD
b2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewpAQCAtMzQwLDcgKzM0Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3Ry
dWN0dXJlRmxhZ3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBib29sKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50
ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAg
dm9pZCB1bmxpbmtDYWxscygpOwogCkBAIC0zNjQsMTEgKzM2NiwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9i
amVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYg
KCFtX3Byb2dyYW1Db2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fcHJvZ3JhbUNvZGVCbG9jayk7
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVj
dCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworCiAgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKG1fcHJvZ3JhbUNvZGVCbG9jayk7CkBAIC0zOTgsNyArNDAyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHVu
bGlua0NhbGxzKCk7CiAKQEAgLTQ0MywxMSArNDQ3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fY29k
ZUJsb2NrRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGNhbGxlZUFyZ3NFeGVjKTsKKyAgICAgICAgICAg
ICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgICAgICAgICByZXR1
cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFy
Z3NFeGVjID0gMCk7CisKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsOwpAQCAtNDY0
LDExICs0NzAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCi0g
ICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywg
c2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKik7CisKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsK
QEAgLTQ5NCw2ICs1MDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
Y29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNvbXBpbGVPcHRpbWl6ZWRGb3Ig
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggYSBjYWxsZnJhbWUgc2V0IHVwIHRvIGNhbGwgdGhp
cyBmdW5jdGlvbiwKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgbWFrZSBzcGVjdWxhdGl2
ZSBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSBhcmd1bWVudHMuCisgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+Y2FsbGVlKCkpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5p
bmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CisgICAgICAgICAgICBBU1NFUlQoYXNGdW5j
dGlvbihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNhbGwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGV4
ZWMpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAg
ICAgICAgICByZXR1cm4gY29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKQEAgLTU0Miw4ICs1NjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25Q
YXJhbWV0ZXJzKiwgYm9vbCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKICAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNv
bnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgYm9vbCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKIAotICAgICAgICBKU09i
amVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSos
IEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpOwotICAgICAgICBKU09iamVjdCogY29tcGlsZUZv
ckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSk7CisgICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2Nv
cGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgdW5zaWduZWQgbV9u
dW1DYXB0dXJlZFZhcmlhYmxlcyA6IDMxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxh
dGZvcm0uaAkocmV2aXNpb24gOTQxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2MCw2ICs5NjAsMTAgQEAKICNkZWZpbmUgRU5B
QkxFX0RGR19KSVQgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfVElFUkVEX0NPTVBJ
TEFUSU9OKSAmJiBFTkFCTEUoREZHX0pJVCkKKyNkZWZpbmUgRU5BQkxFX1RJRVJFRF9DT01QSUxB
VElPTiAwCisjZW5kaWYKKwogLyogQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIEpTVkFM
VUU2NCwgb25seSB0ZXN0ZWQgb24gUExBVEZPUk0oTUFDKSAqLwogI2lmICFkZWZpbmVkKEVOQUJM
RV9WQUxVRV9QUk9GSUxFUikgJiYgRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFMVUU2NCkgJiYgUExB
VEZPUk0oTUFDKQogI2RlZmluZSBFTkFCTEVfVkFMVUVfUFJPRklMRVIgMApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oCShyZXZpc2lvbiA5
NDE0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDI0ICs0MSw2MyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogZW51
bSBTZW50aW5lbFRhZyB7IFNlbnRpbmVsIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBj
bGFzcyBTZW50aW5lbExpbmtlZExpc3QgewordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJh
c2ljUmF3U2VudGluZWxOb2RlIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIE5vZGUqIGl0ZXJhdG9y
OworICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKFNlbnRpbmVsVGFnKQorICAgICAgICA6IG1fbmV4
dCgwKQorICAgICAgICAsIG1fcHJldigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmFzaWNS
YXdTZW50aW5lbE5vZGUoKQorICAgICAgICA6IG1fbmV4dCgwKQorICAgICAgICAsIG1fcHJldigw
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRQcmV2KEJhc2ljUmF3U2VudGluZWxO
b2RlKiBwcmV2KSB7IG1fcHJldiA9IHByZXY7IH0KKyAgICB2b2lkIHNldE5leHQoQmFzaWNSYXdT
ZW50aW5lbE5vZGUqIG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorICAgIAorICAgIFQqIHByZXYo
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9wcmV2KTsgfQorICAgIFQqIG5leHQoKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxUKj4obV9uZXh0KTsgfQorICAgIAorICAgIGJvb2wgaXNPbkxpc3Qo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhbV9wcmV2ID09ICEhbV9uZXh0KTsKKyAg
ICAgICAgcmV0dXJuICEhbV9wcmV2OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZSgpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9uZXh0OworICAgIEJh
c2ljUmF3U2VudGluZWxOb2RlKiBtX3ByZXY7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgUmF3Tm9kZSA9IFQ+IGNsYXNzIFNlbnRpbmVsTGlua2VkTGlzdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdCgpOwog
Ci0gICAgdm9pZCBwdXNoKE5vZGUqKTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmUoTm9kZSopOwor
ICAgIHZvaWQgcHVzaChUKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlKFQqKTsKIAogICAgIGl0
ZXJhdG9yIGJlZ2luKCk7CiAgICAgaXRlcmF0b3IgZW5kKCk7CiAKIHByaXZhdGU6Ci0gICAgTm9k
ZSBtX2hlYWRTZW50aW5lbDsKLSAgICBOb2RlIG1fdGFpbFNlbnRpbmVsOworICAgIFJhd05vZGUg
bV9oZWFkU2VudGluZWw7CisgICAgUmF3Tm9kZSBtX3RhaWxTZW50aW5lbDsKIH07CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpTZW50
aW5lbExpbmtlZExpc3QoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgQmFzaWNSYXdTZW50
aW5lbE5vZGU8VD46OnJlbW92ZSgpCit7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PFQsIEJhc2lj
UmF3U2VudGluZWxOb2RlPFQ+ID46OnJlbW92ZShzdGF0aWNfY2FzdDxUKj4odGhpcykpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBSYXdOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkKICAgICA6IG1faGVh
ZFNlbnRpbmVsKFNlbnRpbmVsKQogICAgICwgbV90YWlsU2VudGluZWwoU2VudGluZWwpCiB7CkBA
IC02OSwyMSArMTA4LDI0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgU2VudGlu
ZWwKICAgICBtX3RhaWxTZW50aW5lbC5zZXROZXh0KDApOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgTm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6aXRlcmF0
b3IgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpiZWdpbigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxU
LCBSYXdOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjpiZWdp
bigpCiB7Ci0gICAgcmV0dXJuIG1faGVhZFNlbnRpbmVsLm5leHQoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VCo+KG1faGVhZFNlbnRpbmVsLm5leHQoKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBOb2RlPiBpbmxpbmUgdHlwZW5hbWUgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjppdGVy
YXRvciBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OmVuZCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxU
LCBSYXdOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjplbmQo
KQogewotICAgIHJldHVybiAmbV90YWlsU2VudGluZWw7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQqPigmbV90YWlsU2VudGluZWwpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5s
aW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpwdXNoKE5vZGUqIG5vZGUpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxM
aW5rZWRMaXN0PFQsIFJhd05vZGU+OjpwdXNoKFQqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUp
OwotICAgIE5vZGUqIHByZXYgPSAmbV9oZWFkU2VudGluZWw7Ci0gICAgTm9kZSogbmV4dCA9IG1f
aGVhZFNlbnRpbmVsLm5leHQoKTsKKyAgICBBU1NFUlQoIW5vZGUtPnByZXYoKSk7CisgICAgQVNT
RVJUKCFub2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYgPSAmbV9oZWFkU2Vu
dGluZWw7CisgICAgUmF3Tm9kZSogbmV4dCA9IG1faGVhZFNlbnRpbmVsLm5leHQoKTsKIAogICAg
IG5vZGUtPnNldFByZXYocHJldik7CiAgICAgbm9kZS0+c2V0TmV4dChuZXh0KTsKQEAgLTkyLDE3
ICsxMzQsMjUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbgogICAg
IG5leHQtPnNldFByZXYobm9kZSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxp
bmUgdm9pZCBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92ZShOb2RlKiBub2RlKQordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBSYXdOb2RlPjo6cmVtb3ZlKFQqIG5vZGUpCiB7Ci0gICAgTm9kZSogcHJl
diA9IG5vZGUtPnByZXYoKTsKLSAgICBOb2RlKiBuZXh0ID0gbm9kZS0+bmV4dCgpOworICAgIEFT
U0VSVChub2RlKTsKKyAgICBBU1NFUlQoISFub2RlLT5wcmV2KCkpOworICAgIEFTU0VSVCghIW5v
ZGUtPm5leHQoKSk7CisgICAgCisgICAgUmF3Tm9kZSogcHJldiA9IG5vZGUtPnByZXYoKTsKKyAg
ICBSYXdOb2RlKiBuZXh0ID0gbm9kZS0+bmV4dCgpOwogCiAgICAgcHJldi0+c2V0TmV4dChuZXh0
KTsKICAgICBuZXh0LT5zZXRQcmV2KHByZXYpOworICAgIAorICAgIG5vZGUtPnNldFByZXYoMCk7
CisgICAgbm9kZS0+c2V0TmV4dCgwKTsKIH0KIAogfQogCit1c2luZyBXVEY6OkJhc2ljUmF3U2Vu
dGluZWxOb2RlOwogdXNpbmcgV1RGOjpTZW50aW5lbExpbmtlZExpc3Q7CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106240</attachid>
            <date>2011-09-02 19:50:03 -0700</date>
            <delta_ts>2011-09-03 01:12:41 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>dynopt_patch_3.diff</filename>
            <type>text/plain</type>
            <size>135741</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3Rlc3RzL3Y4LXY2L3Y4LWNyeXB0by5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1N1blNwaWRlci90ZXN0cy92OC12Ni92
OC1jcnlwdG8uanMJKHJldmlzaW9uIDk0NDc2KQorKysgUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlk
ZXIvdGVzdHMvdjgtdjYvdjgtY3J5cHRvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNiArMzQy
LDggQEAgZnVuY3Rpb24gYm5wTFNoaWZ0VG8obixyKSB7CiAgIGZvcihpID0gZHMtMTsgaSA+PSAw
OyAtLWkpIHJfYXJyYXlbaV0gPSAwOwogICByX2FycmF5W2RzXSA9IGM7CiAgIHIudCA9IHRoaXMu
dCtkcysxOworLy8gICAgcHJpbnQoImRzID0gIitkcyk7CisvLyAgICBwcmludCgici50ID0gIity
LnQpOwogICByLnMgPSB0aGlzLnM7CiAgIHIuY2xhbXAoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg4IEBACisyMDExLTA5LTAyICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSmF2YVNjcmlwdENvcmUgZG9l
cyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNTCisKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRXZWFrUmVmZXJl
bmNlcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJFdmFsQ2Fj
aGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhpc3RpbmdFbnRyaWVzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9j
azo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVk
KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpH
bG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFt
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJv
ZmlsZTo6VmFsdWVQcm9maWxlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjbGFzc0lu
Zm8pOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mU2FtcGxlcyk6CisgICAg
ICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZJbnQzMnMpOgorICAgICAgICAoSlNDOjpW
YWx1ZVByb2ZpbGU6Om51bWJlck9mRG91Ymxlcyk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmls
ZTo6bnVtYmVyT2ZDZWxscyk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZB
cnJheXMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnByb2JhYmlsaXR5T2ZBcnJheSk6
CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OlZhbHVl
UHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3RpY3MpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6
OldlYWtCdWNrZXQ6OldlYWtCdWNrZXQpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Oldl
YWtCdWNrZXQ6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6V2Vha0J1
Y2tldDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6V2Vha0J1Y2tldDo6
aXNDbGFzc0luZm8pOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OldlYWtCdWNrZXQ6Omlz
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpXZWFrQnVja2V0Ojphc1N0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6V2Vha0J1Y2tldDo6YXNDbGFz
c0luZm8pOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OldlYWtCdWNrZXQ6OmdldENsYXNz
SW5mbyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpC
eXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZENh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpkeW5hbWljYWxseVByZWRp
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGVGdW5jdGlvbik6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21w
aWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzSlND
b25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzSW50MzJDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzRG91YmxlQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFs
dWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6aXNDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzSlNDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzSW50MzJDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzRG91YmxlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAgICAgICAoSlND
OjpERkc6OmlzTnVtYmVyUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6cHJlZGljdGlv
blRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjptZXJnZVByZWRpY3Rpb24pOgorICAgICAg
ICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp2
YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNJbnQzMkNvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0RvdWJsZUNvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpwcmVkaWN0KToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRpb24uY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpQcm9wYWdhdG9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFn
YXRvcjo6c2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6bWVy
Z2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVO
b2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVGb3J3YXJkKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVCYWNrd2FyZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRpb24u
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnTGlua0Zvcik6CisgICAgICAg
ICogaGVhcC9IYW5kbGVIZWFwLmg6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5v
ZGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmhhcnZl
c3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAg
ICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAg
ICAoSlNDOjpTbG90VmlzaXRvcjo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKiBo
ZWFwL01hcmtTdGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFkZFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Ok1hcmtTdGFjayk6CisgICAg
ICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKToKKyAgICAgICAg
KiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVz
dGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjpXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKToKKyAgICAgICAgKEpTQzo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rl
cjo6fldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFRpbWVvdXRDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9K
SVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyk6CisgICAgICAgICogaml0
L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6SklUQ29kZSk6CisgICAgICAgIChK
U0M6OkpJVENvZGU6OmJvdHRvbVRpZXJKSVQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjp0b3BU
aWVySklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6bmV4dFRpZXJKSVQpOgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6Cisg
ICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJu
YWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2Fs
bCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZv
cik6CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6ZGVzY3JpcHRpb24pOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0
Zi9TZW50aW5lbExpbmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5v
ZGU6OkJhc2ljUmF3U2VudGluZWxOb2RlKToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5l
bE5vZGU6OnNldFByZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0
TmV4dCk6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpwcmV2KToKKyAgICAg
ICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6Om5leHQpOgorICAgICAgICAoV1RGOjpCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTo6aXNPbkxpc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6Cisg
ICAgICAgIChXVEY6Ojo6U2VudGluZWxMaW5rZWRMaXN0KToKKyAgICAgICAgKFdURjo6OjpiZWdp
bik6CisgICAgICAgIChXVEY6Ojo6ZW5kKToKKyAgICAgICAgKFdURjo6OjpwdXNoKToKKwogMjAx
MS0wOS0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXBsYWNlIGxvY2FsIGltcGxlbWVudGF0aW9uIG9mIHN0cmluZyBlcXVhbHMoKSBtZXRob2RzIHdp
dGggVVN0cmluZyB2ZXJzaW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDk0NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDEyICs0OSwxNyBA
QAogCQkwQkRGRkFFMDBGQzYxOTI5MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFENDBG
QzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5
RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9j
UHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0
IC8qIFNpemVMaW1pdHMuY3BwICovOyB9OworCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyog
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZG
MjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2M0IzODEzRkM2
RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIw
MENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdy
aXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuY3BwICovOyB9OwogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3Ry
dW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgx
NTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0u
Y3BwICovOyB9OworCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4
MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCAqLzsgfTsKKwkJMEZEM0M4
MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZH
RHJpdmVyLmNwcCAqLzsgfTsKKwkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3Bh
Z2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24uaCAqLzsgfTsKKwkJMEZE
M0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovOyB9OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAw
Njc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAv
KiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4
LmNwcCAqLzsgfTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVXcmFw
cGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87IH07CkBA
IC0zNzQsNyArMzc5LDcgQEAKIAkJOTY5QTA3MkEwRUQxQ0U2OTAwRjFGNjgxIC8qIExhYmVsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyNzBF
RDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCAqLzsgfTsKIAkJOTY5QTA3MkIwRUQxQ0U2OTAwRjFG
NjgxIC8qIFJlZ2lzdGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk2OUEwNzI4MEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdpc3RlcklELmggKi87IH07
CiAJCTk2OUEwNzJDMEVEMUNFNjkwMEYxRjY4MSAvKiBTZWdtZW50ZWRWZWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzI5MEVEMUNFNjkw
MEYxRjY4MSAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLzsgfTsKLQkJOTY5QTA3OTYwRUQxRDNBRTAw
RjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NjlBMDc5MDBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCAq
LzsgfTsKKwkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5MDBFRDFEM0FF
MDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1Mg
PSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwogCQk5NjlBMDc5NzBFRDFEM0FFMDBGMUY2
ODEgLyogQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJOTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgx
IC8qIEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk2OUEwNzkyMEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hlLmggKi87
IH07CiAJCTk2OUEwNzk5MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTMwRUQxRDNBRTAw
RjFGNjgxIC8qIEluc3RydWN0aW9uLmggKi87IH07CkBAIC03NzAsNiArNzc1LDcgQEAKIAkJMEJE
RkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gT3duRmFzdE1hbGxvY1B0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUmVm
Q291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkYyOEEyODExQTMzREMz
MDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
NDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2Ft
cGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5n
Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03NzcsNiArNzgzLDEwIEBACiAJCTBGQzgxNTA5MTQwNDNCRDIwMENG
QTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZUYWJsZVNwZWN0
cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNDODIwMTQxMTVDRjgwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZn
L0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyMzE0MTE1
RDFBMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHUHJvcGFnYXRpb24uY3BwOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjQxNDExNUQyMjAw
RkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1Byb3BhZ2F0aW9uLmg7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAv
KiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNTg3LDYgKzE1OTcsNyBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUg
LyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLywK
IAkJCQkwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLywKIAkJ
CQkwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovLAogCQkJ
CTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8sCkBA
IC0yMTc2LDYgKzIxODcsMTAgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEM0M4MjQx
NDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmggKi8sCisJCQkJMEZEM0M4MjMxNDEx
NUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCAqLywKKwkJCQkwRkQzQzgyMjE0MTE1
RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCisJCQkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8sCiAJCQkJODZFQ0E0RjAxMzJFQUE2RDAwMkIyQUQ3IC8q
IERGR0FsaWFzVHJhY2tlci5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBE
RkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yMzU2LDYgKzIzNzEsNyBAQAogCQkJaXNhID0g
UEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owog
CQkJZmlsZXMgPSAoCisJCQkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcx
MCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNF
NDBFMTZGNUNEMDBCMzQ0NjAgLyogQWx3YXlzSW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjEzLDYgKzI2MjksOCBAQAogCQkJCUMyMkM1MkZGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1k
dG9hLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3Ry
dG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRp
bHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQ
cm9wYWdhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNC
IC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0
NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1
MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3
MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyOSw2
ICszMDQ3LDggQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTBGRDNDODI1MTQxMTVENDAw
MEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzQzgy
NjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2
aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNiArMTAwMSwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24o
Y29uZCkpKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKKyAgICB7CisjaWYg
Q1BVKFg4Nl82NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGRlc3QubV9wdHIpLCBYODZS
ZWdpc3RlcnM6OnIxMSk7CisgICAgICAgIGFkZDMyKHNyYywgQWRkcmVzcyhYODZSZWdpc3RlcnM6
OnIxMSkpOworI2Vsc2UKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pbShzcmMubV92YWx1ZSwg
ZGVzdC5tX3B0cik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakND
KHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVz
dWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewog
ICAgICAgICBhZGQzMihzcmMsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk0NDc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDEs
OSArMTQwMSwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9
CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIFN5bWJvbFRhYmxlKiBzeW1UYWIsIGJvb2wgaXNDb25zdHJ1Y3RvcikKK0NvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxl
KiBzeW1UYWIsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVy
bmF0aXZlKQogICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFwKCZtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApCisgICAgLCBtX2V4ZWN1dGVDb3VudGVyKC0xMDAwKSAv
LyB0cmlnZ2VyIG9wdGltaXphdGlvbiB3aGVuIHNpZ24gYml0IGNsZWFycwogICAgICwgbV9udW1D
YWxsZWVSZWdpc3RlcnMoMCkKICAgICAsIG1fbnVtVmFycygwKQogICAgICwgbV9udW1QYXJhbWV0
ZXJzKDApCkBAIC0xNDIyLDYgKzE0MjMsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAsIG1fc291
cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFiKQorICAg
ICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwog
CkBAIC0xNDMzLDIxICsxNDM1LDI2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAjaWYgRU5BQkxFKFZFUkJPU0Vf
VkFMVUVfUFJPRklMRSkKLSAgICBwcmludGYoIlZhbHVlUHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlz
KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZhbHVlUHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsr
aSkgewogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSB2YWx1ZVByb2ZpbGUoaSk7CiAg
ICAgICAgIGlmIChwcm9maWxlLT5ieXRlY29kZU9mZnNldCA8IDApIHsKICAgICAgICAgICAgIEFT
U0VSVChwcm9maWxlLT5ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0gICAgICAgICAgICBwcmludGYo
IiAgIGFyZyA9ICV1OiAiLCBpICsgMSk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAg
IGFyZyA9ICV1OiAiLCBpICsgMSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJpbnRm
KCIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5ieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIHByaW50
Zigic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1XG4iLAot
ICAgICAgICAgICAgICAgcHJvZmlsZS0+bnVtYmVyT2ZTYW1wbGVzKCksCi0gICAgICAgICAgICAg
ICBwcm9maWxlLT5wcm9iYWJpbGl0eU9mSW50MzIoKSwKLSAgICAgICAgICAgICAgIHByb2ZpbGUt
PnByb2JhYmlsaXR5T2ZEb3VibGUoKSwKLSAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmls
aXR5T2ZDZWxsKCkpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBiYyA9ICVkOiAi
LCBwcm9maWxlLT5ieXRlY29kZU9mZnNldCk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3RkZXJy
KTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogICAgIH0KICNlbmRpZgorICAgIAor
ICAgIC8vIFdlIHNob3VsZCBub3QgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgdGhlcmUgYXJlIGlu
Y29taW5nIGNhbGxzLiBCdXQKKyAgICAvLyBpZiB0aGlzIGlzIGNhbGxlZCBkdXJpbmcgaGVhcCBk
ZXN0cnVjdGlvbiwgdGhlbiB0aGVyZSBtYXkgc3RpbGwgYmUKKyAgICAvLyBpbmNvbWluZyBjYWxs
cywgd2hpY2ggaXMgaGFybWxlc3MuCisgICAgCisgICAgLy8gTm90ZSB0aGF0IG91ciBvdXRnb2lu
ZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBDb2RlQmxvY2tzJworICAgIC8vIG1f
aW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB+
Q2FsbExpbmtJbmZvCisgICAgLy8gZGVzdHJ1Y3RvcnMuCiAKICNpZiBFTkFCTEUoSklUKQogICAg
IGZvciAoc2l6ZV90IHNpemUgPSBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQpAQCAtMTUxNSw2ICsxNTIyLDEwIEBAIHZvaWQgRXZhbENvZGVDYWNoZTo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFYKIAogdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogeworICAgIGJvb2wgaGFuZGxlV2Vha1JlZmVyZW5jZXMgPSBm
YWxzZTsKKyAgICAKKyAgICBpZiAoISFtX2FsdGVybmF0aXZlKQorICAgICAgICBtX2FsdGVybmF0
aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9i
YWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7CiAgICAg
aWYgKG1fcmFyZURhdGEpIHsKQEAgLTE1NjIsNiArMTU3Myw2NCBAQCB2b2lkIENvZGVCbG9jazo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKKworI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9
IDA7IHByb2ZpbGVJbmRleCA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK3Byb2ZpbGVJbmRl
eCkgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSB2YWx1ZVByb2ZpbGUocHJvZmls
ZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBpZiAoIXByb2ZpbGUtPmJ1Y2tldHNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgaWYgKCEh
cHJvZmlsZS0+d2Vha0J1Y2tldHNbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICBoYW5kbGVX
ZWFrUmVmZXJlbmNlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghSlNWYWx1ZTo6ZGVjb2RlKHBy
b2ZpbGUtPmJ1Y2tldHNbaW5kZXhdKS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIHByb2Zp
bGUtPndlYWtCdWNrZXRzW2luZGV4XSA9IFZhbHVlUHJvZmlsZTo6V2Vha0J1Y2tldCgpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKyAgICAKKyAgICBpZiAoaGFuZGxlV2Vha1JlZmVyZW5jZXMpCisgICAgICAgIHZpc2l0
b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcih0aGlzKTsKK30KKwordm9pZCBDb2RlQmxvY2s6
OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKQoreworI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKKyAgICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2ZpbGVJbmRl
eCA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK3Byb2ZpbGVJbmRleCkgeworICAgICAgICBW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSB2YWx1ZVByb2ZpbGUocHJvZmlsZUluZGV4KTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IFZhbHVlUHJvZmls
ZTo6bnVtYmVyT2ZCdWNrZXRzOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAoISFwcm9maWxl
LT5idWNrZXRzW2luZGV4XSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUocHJvZmlsZS0+YnVja2V0c1tpbmRleF0pOworICAgICAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OworICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJv
ZmlsZS0+YnVja2V0c1tpbmRleF0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICBwcm9maWxlLT53ZWFrQnVja2V0c1tpbmRleF0gPSBjZWxsLT5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWVQcm9maWxl
OjpXZWFrQnVja2V0IHdlYWsgPSBwcm9maWxlLT53ZWFrQnVja2V0c1tpbmRleF07CisgICAgICAg
ICAgICBpZiAoIXdlYWsgfHwgd2Vhay5pc0NsYXNzSW5mbygpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQod2Vhay5pc1N0cnVjdHVy
ZSgpKTsKKyAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrLmFzU3RydWN0dXJlKCkp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBw
cm9maWxlLT53ZWFrQnVja2V0c1tpbmRleF0gPSB3ZWFrLmFzU3RydWN0dXJlKCktPmNsYXNzSW5m
bygpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiB9CiAKIEhhbmRsZXJJbmZvKiBDb2RlQmxv
Y2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKQEAg
LTE3MjcsOCArMTc5NiwzMCBAQCB2b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbihDYWxs
RnJhCiB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmso
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKQor
eworICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKKyAgICAKKyAgICBpZiAoaXNERkcpIHsKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9u
Q2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9w
ZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworI2Vsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29k
ZUxvY2F0aW9uTmVhckNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwgaXNDYWxsPyBnbG9iYWxEYXRh
LmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0
aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOworICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFs
c2U7CisgICAgY2FsbGVlLmNsZWFyKCk7CisKKyAgICAvLyBJdCB3aWxsIGJlIG9uIGEgbGlzdCBp
ZiB0aGUgY2FsbGVlIGhhcyBhIGNvZGUgYmxvY2suCisgICAgaWYgKGlzT25MaXN0KCkpCisgICAg
ICAgIHJlbW92ZSgpOworfQorCiB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMoKQogeworICAg
IGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnVubGlua0NhbGxz
KCk7CiAgICAgaWYgKCEobV9jYWxsTGlua0luZm9zLnNpemUoKSB8fCBtX21ldGhvZENhbGxMaW5r
SW5mb3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9nbG9iYWxEYXRhLT5j
YW5Vc2VKSVQoKSkKQEAgLTE3MzcsMjQgKzE4MjgsMTAxIEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxp
bmtDYWxscygpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbGxMaW5rSW5mb3Muc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3NbaV0uaXNMaW5rZWQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZ2V0SklUQ29kZSgpLmppdFR5cGUo
KSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwobV9jYWxsTGlua0luZm9zW2ld
LmNhbGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBvcGVyYXRp
b25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotI2Vsc2UKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwobV9jYWxsTGlua0lu
Zm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0NhbGwgPyBt
X2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6IG1fZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOwotICAgICAgICBtX2NhbGxM
aW5rSW5mb3NbaV0udW5saW5rKCk7CisgICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmso
Km1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgfQogfQorCit2b2lkIENvZGVCbG9j
azo6dW5saW5rSW5jb21pbmdDYWxscygpCit7CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKHRoaXMpOworICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29t
aW5nQ2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmso
Km1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7Cit9CiAjZW5kaWYKIAogdm9pZCBDb2RlQmxv
Y2s6OmNsZWFyRXZhbENhY2hlKCkKIHsKKyAgICBpZiAoISFtX2FsdGVybmF0aXZlKQorICAgICAg
ICBtX2FsdGVybmF0aXZlLT5jbGVhckV2YWxDYWNoZSgpOwogICAgIGlmICghbV9yYXJlRGF0YSkK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZS5jbGVhcigp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgcmVwbGFjZUV4aXN0aW5n
RW50cmllcyhWZWN0b3I8VD4mIHRhcmdldCwgVmVjdG9yPFQ+JiBzb3VyY2UpCit7CisgICAgQVNT
RVJUKHRhcmdldC5zaXplKCkgPD0gc291cmNlLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YXJnZXQuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhcmdldFtpXSA9IHNvdXJjZVtp
XTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCkKK3sKKyAg
ICBpZiAoIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZXBsYWNl
RXhpc3RpbmdFbnRyaWVzKG1fY29uc3RhbnRSZWdpc3RlcnMsIG1fYWx0ZXJuYXRpdmUtPm1fY29u
c3RhbnRSZWdpc3RlcnMpOworICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9mdW5jdGlvbkRl
Y2xzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9uRGVjbHMpOworICAgIHJlcGxhY2VFeGlzdGlu
Z0VudHJpZXMobV9mdW5jdGlvbkV4cHJzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9uRXhwcnMp
OworfQorCisvLyBGSVhNRTogSW1wbGVtZW50IE9TUi4gSWYgY29tcGlsZU9wdGltaXplZCgpIGlz
IGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdGhlciB0aGFuIHRoZQorLy8gZXBpbG9ndWUsIGRvIE9T
UiBmcm9tIHRoZSBvbGQgY29kZSBibG9jayB0byB0aGUgbmV3IG9uZS4KKworLy8gRklYTUU6IEFm
dGVyIGRvaW5nIHN1Y2Nlc3NmdWwgb3B0aW1pemVkIGNvbXBpbGF0aW9uLCByZXNldCB0aGUgcHJv
ZmlsaW5nIGNvdW50ZXIgdG8gLTEsIHNvCisvLyB0aGF0IHRoZSBuZXh0IGV4ZWN1dGlvbiBvZiB0
aGUgb2xkIGNvZGUgYmxvY2sgd2lsbCBqdW1wIHN0cmFpZ2h0IGludG8gY29tcGlsZU9wdGltaXpl
ZCgpCisvLyBhbmQgcGVyZm9ybSBPU1IuCisKKy8vIEZJWE1FOiBFbnN1cmUgdGhhdCBhIGNhbGwg
dG8gY29tcGlsZU9wdGltaXplZCgpIGp1c3QgZG9lcyBPU1IgKGFuZCByZXNldHMgdGhlIGNvdW50
ZXIgdG8gLTEpCisvLyBpZiB0aGUgY29kZSBoYWQgYWxyZWFkeSBiZWVuIGNvbXBpbGVkLgorCitD
b2RlQmxvY2sqIFByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4g
JnN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5l
cmF0ZWRCeXRlY29kZSgpOworfQorCitDb2RlQmxvY2sqIEV2YWxDb2RlQmxvY2s6OnJlcGxhY2Vt
ZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZSgpOworfQorCitDb2RlQmxvY2sqIEZ1bmN0
aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2Rl
Rm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9
CisKK0pTT2JqZWN0KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIGlmIChyZXBs
YWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlw
ZSgpKSkgeworICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGl0
IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29v
bigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNPYmplY3QqIGVycm9yID0gc3Rh
dGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVP
cHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgIHJldHVybiBlcnJvcjsKK30KKwor
SlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVj
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxhY2VtZW50
KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKSB7
CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhpcyBh
Z2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChl
eGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCog
RnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKSB7CisgICAg
ICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhpcyBhZ2FpbiBh
bnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWRGb3Io
ZXhlYywgc2NvcGVDaGFpbk5vZGUsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3Qg
OiBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDk0NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTMgQEAKICNpbmNsdWRlICJOb2Rlcy5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKKyNpbmNs
dWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgi
CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC05NywxMiArOTksMTkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RydWN0IENhbGxMaW5r
SW5mbyB7CisgICAgc3RydWN0IENhbGxMaW5rSW5mbzogcHVibGljIEJhc2ljUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBDYWxsTGlua0luZm8oKQogICAgICAgICAgICAg
OiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKICAgICAgICAgICAgICwgaXNDYWxsKGZhbHNl
KQorICAgICAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB+Q2FsbExpbmtJbmZvKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGlzT25MaXN0KCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlKCk7CisgICAgICAgIH0KIAogICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb247IC8vIGl0J3MgYSBuZWFy
IGNhbGwgaW4gdGhlIG9sZCBKSVQsIG9yIGEgbm9ybWFsIGNhbGwgaW4gREZHCiAgICAgICAgIENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CkBAIC0xMTAsMTMgKzExOSwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNh
bGxlZTsKICAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAgICAgICAgIGJv
b2wgaXNDYWxsIDogMTsKKyAgICAgICAgYm9vbCBpc0RGRyA6IDE7CiAKICAgICAgICAgYm9vbCBp
c0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQotICAgICAgICB2b2lkIHVubGluaygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7Ci0gICAgICAg
ICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHVubGluayhKU0ds
b2JhbERhdGEmLCBSZXBhdGNoQnVmZmVyJik7CiAKICAgICAgICAgYm9vbCBzZWVuT25jZSgpCiAg
ICAgICAgIHsKQEAgLTIwNSwxOSArMjExLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KICNl
bmRpZgogCi0gICAgY2xhc3MgQ29kZUJsb2NrIHsKKyAgICBjbGFzcyBDb2RlQmxvY2s6IHB1Ymxp
YyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwgSlNH
bG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNl
T2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIGJvb2wgaXNDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVU
eXBlLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25l
ZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3du
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0ds
b2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIEhlYXAqIG1faGVhcDsKIAogICAg
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q29kZUJsb2NrKCk7CisgICAgICAgIAorICAgICAg
ICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsg
fQorICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAK
QEAgLTI3Nyw2ICsyODcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkIHVubGlua0NhbGxzKCk7CisgICAgICAgIAorICAgICAgICBib29sIGhhc0luY29taW5n
Q2FsbHMoKSB7IHJldHVybiBtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2Fs
bHMuZW5kKCk7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxs
TGlua0luZm8qIGluY29taW5nKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luY29taW5nQ2Fs
bHMucHVzaChpbmNvbWluZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgdW5s
aW5rSW5jb21pbmdDYWxscygpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCkBA
IC0yOTgsOCArMzE3LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBFTkFCTEUo
SklUKQotICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0cnVj
dG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKSA6
IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9CisgICAgICAg
IHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ppdENvZGUg
PSBjb2RlOworICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFy
aXR5Q2hlY2s7CisgICAgICAgIH0KKyAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0
dXJuIG1faml0Q29kZTsgfQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7
IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgpOyB9CiAgICAgICAgIEV4ZWN1dGFibGVQb29sKiBl
eGVjdXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlUG9vbCgp
OyB9CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpID0gMDsKKyNlbHNlCisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlw
ZSgpIHsgcmV0dXJuIEpJVENvZGU6OkJhc2VsaW5lSklUOyB9CiAjZW5kaWYKIAogICAgICAgICBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVy
RXhlY3V0YWJsZS5nZXQoKTsgfQpAQCAtMzk2LDYgKzQyNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxW
YWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fdmFsdWVQ
cm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAg
ICB9CisgICAgICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaW50IGFy
Z3VtZW50SW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGFyZ3VtZW50
SW5kZXggLSAxOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkg
Pj0gbV92YWx1ZVByb2ZpbGVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gdmFsdWVQcm9maWxlKGFyZ3VtZW50SW5k
ZXggLSAxKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQtPmJ5dGVjb2RlT2Zmc2V0ICE9IC0xKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQogI2VuZGlmCiAKICAgICAgICAgdW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluZm9Db3Vu
dCgpIGNvbnN0CkBAIC01MzMsNiArNTcyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBF
dmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGU7IH0KIAogICAgICAgICB2b2lk
IHNocmlua1RvRml0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVy
bmF0aXZlKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24o
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptaW4oKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50MzJfdCBt
X2V4ZWN1dGVDb3VudGVyOwogCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmlu
ZyBtZW1iZXJzIHByaXZhdGUuCiAKQEAgLTU5Miw2ICs2NDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmVjdG9yPEdsb2JhbFJlc29sdmVJbmZvPiBtX2dsb2JhbFJlc29sdmVJbmZvczsK
ICAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBW
ZWN0b3I8TWV0aG9kQ2FsbExpbmtJbmZvPiBtX21ldGhvZENhbGxMaW5rSW5mb3M7CisgICAgICAg
IEpJVENvZGUgbV9qaXRDb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRD
b2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0lu
Zm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gPiBtX2luY29taW5nQ2FsbHM7
CiAjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTYwOCw2ICs2NjQsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsK
IAorICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOyAvLyBGSVhNRSBtYWtl
IHRoaXMgZG8gc29tZXRoaW5nCisKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIHB1YmxpYzoKQEAgLTY0NCw5ICs3
MDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyByZXNwb25zaWJsZSBmb3IgbWFya2luZyBp
dC4KIAogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewotICAg
IHB1YmxpYzoKLSAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZtX3Vu
c2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgR2xvYmFs
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8
Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9m
ZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFsc2UsIGFsdGVybmF0aXZlKQogICAgICAg
ICB7CiAgICAgICAgIH0KIApAQCAtNjU2LDE2ICs3MTQsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAg
ICAgcHVibGljOgotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKLSAgICAg
ICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2Jh
bE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAgICAgIFByb2dyYW1Db2RlQmxvY2soUHJv
Z3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmpl
Y3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9
CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2Rl
Kik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAg
ICAgfTsKIAogICAgIGNsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2Nr
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCkKLSAgICAg
ICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2Jh
bE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAgICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2NvcGVE
ZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBz
b3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICAsIG1fYmFzZVNjb3Bl
RGVwdGgoYmFzZVNjb3BlRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNjc5LDYgKzc0
MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5p
c0VtcHR5KCkpOwogICAgICAgICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMpOwogICAg
ICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2Vu
ZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9iYXNlU2NvcGVEZXB0aDsKQEAgLTY5
MSwxNCArNzYxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBhcyB3ZSBuZWVkIHRv
IGluaXRpYWxpc2UgdGhlIENvZGVCbG9jayBiZWZvcmUgd2UgY291bGQgaW5pdGlhbGlzZSBhbnkg
UmVmUHRyIHRvIGhvbGQgdGhlIHNoYXJlZAogICAgICAgICAvLyBzeW1ib2wgdGFibGUsIHNvIHdl
IGp1c3QgcGFzcyBhcyBhIHJhdyBwb2ludGVyIHdpdGggYSByZWYgY291bnQgb2YgMS4gIFdlIHRo
ZW4gbWFudWFsbHkgZGVyZWYKICAgICAgICAgLy8gaW4gdGhlIGRlc3RydWN0b3IuCi0gICAgICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
Ym9vbCBpc0NvbnN0cnVjdG9yKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRh
YmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0
LCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCkubGVha1JlZigpLCBpc0NvbnN0cnVjdG9yKQor
ICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VP
ZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0
aXZlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwg
Z2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBTaGFyZWRTeW1ib2xU
YWJsZTo6Y3JlYXRlKCkubGVha1JlZigpLCBpc0NvbnN0cnVjdG9yLCBhbHRlcm5hdGl2ZSkKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgICAgIH5GdW5jdGlvbkNvZGVCbG9jaygpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxlKCktPmRlcmVmKCk7CiAgICAgICAgIH0K
KyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1
YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
KTsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisjZW5kaWYKICAg
ICB9OwogCiAgICAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2
aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpZm5kZWYgVmFsdWVQcm9m
aWxlX2gKICNkZWZpbmUgVmFsdWVQcm9maWxlX2gKIAorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00NSwxNCArNDcsMjUgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAg
ICAgIDogYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAgICBi
dWNrZXRzW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKKyAgICAgICAgICAg
IGJ1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CisgICAgCisg
ICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCEhYnVja2V0c1tidWNrZXRdKSB7CisgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbYnVja2V0XSk7CisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHdlYWtCdWNrZXRzW2J1Y2tldF0uZ2V0Q2xhc3NJbmZvKCk7
CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlcygpIGNvbnN0CiAgICAg
ewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghIWJ1Y2tl
dHNbaV0pCisgICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldIHx8ICEhd2Vha0J1Y2tldHNbaV0p
CiAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTY0LDEyICs3NywxMiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gY291bnRzICogY2VydGFpbnR5IC8gbnVtYmVy
T2ZTYW1wbGVzOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZJ
bnQzMnMoKSBjb25zdAogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoISFidWNrZXRzW2ldICYmIGJ1Y2tldHNbaV0uZ2V0KCkuaXNJbnQzMigpKQor
ICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSAmJiBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tp
XSkuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJlc3VsdCsrOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC03OSw3ICs5Miw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUg
ewogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
ISFidWNrZXRzW2ldICYmIGJ1Y2tldHNbaV0uZ2V0KCkuaXNEb3VibGUoKSkKKyAgICAgICAgICAg
IGlmICghIWJ1Y2tldHNbaV0gJiYgSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pLmlzRG91Ymxl
KCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTg5LDcgKzEwMiwxNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgewotICAgICAgICAgICAgaWYgKCEhYnVja2V0
c1tpXSAmJiBidWNrZXRzW2ldLmdldCgpLmlzQ2VsbCgpKQorICAgICAgICAgICAgaWYgKCEhY2xh
c3NJbmZvKGkpKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAg
ICAgaWYgKGNsYXNzSW5mbyhpKSA9PSAmSlNBcnJheTo6c19pbmZvKQogICAgICAgICAgICAgICAg
IHJlc3VsdCsrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMTUsOCAr
MTM4LDE1OSBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQ
cm9iYWJpbGl0eShudW1iZXJPZkNlbGxzKCksIG51bWJlck9mU2FtcGxlcygpKTsKICAgICB9CiAg
ICAgCisgICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkFycmF5KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJheXMoKSwgbnVtYmVyT2ZT
YW1wbGVzKCkpOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSog
b3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAgICAgInNhbXBs
ZXMgPSAldSwgaW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJyYXkgPSAldSIs
CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCisgICAgICAgICAgICAgICAgbnVt
YmVyT2ZJbnQzMnMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRvdWJsZXMoKSwKKyAgICAg
ICAgICAgICAgICBudW1iZXJPZkNlbGxzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcnJh
eXMoKSk7CisgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghIWJ1
Y2tldHNbaV0gfHwgISF3ZWFrQnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIGlmIChmaXJz
dCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIjogIik7CisgICAgICAgICAg
ICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIGZw
cmludGYob3V0LCAiJXMiLCBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuZGVzY3JpcHRpb24o
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghIXdlYWtC
dWNrZXRzW2ldKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICJEZWFkQ2VsbCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgCisgICAgc3RydWN0
IFN0YXRpc3RpY3MgeworICAgICAgICB1bnNpZ25lZCBzYW1wbGVzOworICAgICAgICB1bnNpZ25l
ZCBpbnQzMnM7CisgICAgICAgIHVuc2lnbmVkIGRvdWJsZXM7CisgICAgICAgIHVuc2lnbmVkIGNl
bGxzOworICAgICAgICB1bnNpZ25lZCBhcnJheXM7CisgICAgfTsKKworICAgIC8vIE9wdGltaXpl
ZCBtZXRob2QgZm9yIGdldHRpbmcgYWxsIGNvdW50cyBhdCBvbmNlLgorICAgIHZvaWQgY29tcHV0
ZVN0YXRpc3RpY3MoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdGF0aXN0aWNzJiBzdGF0aXN0
aWNzKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2FtcGxlcyA9IDA7CisgICAgICAg
IHVuc2lnbmVkIGludDMycyAgPSAwOworICAgICAgICB1bnNpZ25lZCBkb3VibGVzID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgY2VsbHMgICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGFycmF5cyAgPSAw
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVj
a2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1Y2tldHNbaV0pIHsKKyAgICAgICAgICAg
ICAgICBXZWFrQnVja2V0IHdlYWtCdWNrZXQgPSB3ZWFrQnVja2V0c1tpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoISF3ZWFrQnVja2V0KSB7CisgICAgICAgICAgICAgICAgICAgIHNhbXBsZXMrKzsK
KyAgICAgICAgICAgICAgICAgICAgY2VsbHMrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdl
YWtCdWNrZXQuZ2V0Q2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFycmF5cysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc2FtcGxlcysrOworICAgICAgICAgICAgCisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pOworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBpbnQzMnMrKzsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAgICAgICAgICAgZG91YmxlcysrOwor
ICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBj
ZWxscysrOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJmdsb2JhbERhdGEsIHZhbHVl
LmFzQ2VsbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlzKys7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcyA9IHNhbXBs
ZXM7CisgICAgICAgIHN0YXRpc3RpY3MuaW50MzJzICA9IGludDMyczsKKyAgICAgICAgc3RhdGlz
dGljcy5kb3VibGVzID0gZG91YmxlczsKKyAgICAgICAgc3RhdGlzdGljcy5jZWxscyAgID0gY2Vs
bHM7CisgICAgICAgIHN0YXRpc3RpY3MuYXJyYXlzICA9IGFycmF5czsKKyAgICB9CisgICAgCiAg
ICAgaW50IGJ5dGVjb2RlT2Zmc2V0OyAvLyAtMSBmb3IgcHJvbG9ndWUKLSAgICBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+IGJ1Y2tldHNbbnVtYmVyT2ZCdWNrZXRzXTsKKyAgICBFbmNvZGVkSlNW
YWx1ZSBidWNrZXRzW251bWJlck9mQnVja2V0c107CisgICAgCisgICAgY2xhc3MgV2Vha0J1Y2tl
dCB7CisgICAgcHVibGljOgorICAgICAgICBXZWFrQnVja2V0KCkKKyAgICAgICAgICAgIDogbV92
YWx1ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFdlYWtCdWNr
ZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgICAgICA6IG1fdmFsdWUocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgV2Vha0J1Y2tldChjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKKyAg
ICAgICAgICAgIDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2xhc3NJbmZv
KSArIDEpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIW1fdmFsdWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhbV92YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBpc0NsYXNzSW5mbygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhIShtX3ZhbHVlICYgMSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
aXNTdHJ1Y3R1cmUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIWlzRW1w
dHkoKSAmJiAhaXNDbGFzc0luZm8oKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3Ry
dWN0dXJlKiBhc1N0cnVjdHVyZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN0
cnVjdHVyZSo+KG1fdmFsdWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdCBD
bGFzc0luZm8qIGFzQ2xhc3NJbmZvKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKGlzQ2xhc3NJbmZvKCkpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Q2xhc3NJbmZvKj4obV92YWx1ZSAtIDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBj
b25zdCBDbGFzc0luZm8qIGdldENsYXNzSW5mbygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICBpZiAoaXNDbGFzc0luZm8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNDbGFzc0luZm8o
KTsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cnVjdHVyZSgpLT5jbGFzc0luZm8oKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB1aW50cHRyX3QgbV92YWx1ZTsK
KyAgICB9OworICAgIAorICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldHNbbnVtYmVyT2ZCdWNrZXRz
XTsgLy8gdGhpcyBpcyBub3QgY292ZXJlZCBieSBhIHdyaXRlIGJhcnJpZXIgYmVjYXVzZSBpdCBp
cyBvbmx5IHNldCBmcm9tIEdDCiB9OwogCiBpbmxpbmUgaW50IGdldFZhbHVlUHJvZmlsZUJ5dGVj
b2RlT2Zmc2V0KFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDk0NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwcmVzZXJ2ZUxhc3RWYXIoCiAgICAgICAgIG1fbGFz
dFZhciA9ICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxv
Y2sqIGNvZGVCbG9jaykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9n
cmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25LaW5kIGNvbXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJv
ZmlsZUhvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkK
ICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVj
dC0+c3VwcG9ydHNSaWNoU291cmNlSW5mbygpKQpAQCAtMjI4LDYgKzIyOCw5IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICAKICAgICBtX2NvZGVCbG9jay0+
bV9udW1QYXJhbWV0ZXJzID0gMTsgLy8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogICAgIGNv
ZGVCbG9jay0+bV9udW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICAK
KyAgICBpZiAoY29tcGlsYXRpb25LaW5kID09IE9wdGltaXppbmdDb21waWxhdGlvbikKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hh
aW4tPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTI1OCw3ICsyNjEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xU
YWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQp
CiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+
ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5n
bG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNo
U291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUlu
Zm8oKSkKQEAgLTQxOSw3ICs0MjIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoRnVuCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9v
a3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxp
bmcoKSkKICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdC0+c3VwcG9ydHNSaWNoU291cmNlSW5mbygpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDExIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXREdW1wc0dl
bmVyYXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUpOwogICAgICAgICBzdGF0aWMgYm9v
bCBkdW1wc0dlbmVyYXRlZENvZGUoKTsKIAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9n
cmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2Nr
Kik7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBTY29wZUNo
YWluTm9kZSosIFN5bWJvbFRhYmxlKiwgQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5dGVjb2RlR2Vu
ZXJhdG9yKEV2YWxOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxDb2Rl
QmxvY2sqKTsKKyAgICAgICAgZW51bSBDb21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0aW9u
LCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKKyAgICAgICAgCisgICAgICAgIEJ5dGVjb2RlR2Vu
ZXJhdG9yKFByb2dyYW1Ob2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFByb2dy
YW1Db2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRv
cihGdW5jdGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVC
bG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxO
b2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqLCBDb21w
aWxhdGlvbktpbmQpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVy
cyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXM7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gY29tcGlsZSB0aGUgZGF0YWZsb3cgZ3JhcGggZnJvbSBhIENvZGVCbG9jay4KIGNsYXNzIEJ5
dGVDb2RlUGFyc2VyIHsKIHB1YmxpYzoKLSAgICBCeXRlQ29kZVBhcnNlcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBHcmFwaCYgZ3JhcGgpCisgICAgQnl0
ZUNvZGVQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQor
ICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fZ3Jh
cGgoZ3JhcGgpCiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAgICAgLCBtX3BhcnNl
RmFpbGVkKGZhbHNlKQpAQCAtNjUsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9wYXJh
bWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgIHsKKyNp
ZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisgICAgICAgIEFTU0VSVChtX3Byb2ZpbGVk
QmxvY2spOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gUGFyc2UgYSBmdWxsIENvZGVCbG9jayBv
ZiBieXRlY29kZS4KQEAgLTQyMSw4ICs0MjUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChhcmdJZHgpKTsKICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSk7
CiAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlv
biArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQp
CisgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUu
b3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKICAgICAgICAgICAgIHNldChwdXRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICAgICAgZHluYW1pY2FsbHlQcmVk
aWN0KGNhbGwsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7CisgICAg
ICAgIH0KICAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1
bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBtX3BhcmFt
ZXRlclNsb3RzID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQ7
CiAgICAgICAgIHJldHVybiBjYWxsOwpAQCAtNDYyLDkgKzQ2OCwzMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICB9IHdoaWxlICghbV9yZXVzYWJsZU5vZGVTdGFjay5pc0VtcHR5
KCkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGR5bmFtaWNhbGx5UHJlZGljdChOb2RlSW5kZXgg
bm9kZUluZGV4LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIHsKKyNpZiBFTkFCTEUoRFlO
QU1JQ19PUFRJTUlaQVRJT04pCisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IG1fcHJv
ZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIEFTU0VSVChwcm9maWxlKTsKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAg
ICBwcmludGYoIkR5bmFtaWMgcHJlZGljdGlvbiBbJXUsICV1XTogIiwgbm9kZUluZGV4LCBieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRvdXQpOworICAgICAgICBwcmlu
dGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLnByZWRpY3QobWFr
ZVByZWRpY3Rpb24oKm1fZ2xvYmFsRGF0YSwgKnByb2ZpbGUpLCBEeW5hbWljUHJlZGljdGlvbik7
CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgZHlu
YW1pY2FsbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBkeW5h
bWljYWxseVByZWRpY3Qobm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCk7CisgICAgfQogCiAgICAg
SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
KyAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKIAog
ICAgIC8vIFRoZSBjdXJyZW50IGJsb2NrIGJlaW5nIGdlbmVyYXRlZC4KQEAgLTU2Myw3ICs1OTIs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOwogICAgICAgICAgICAg
cmV0dXJuICFtX3BhcnNlRmFpbGVkOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIC8v
IFN3aXRjaCBvbiB0aGUgY3VycmVudCBieXRlY29kZSBvcGNvZGUuCiAgICAgICAgIEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fY3VycmVudElu
ZGV4OwogICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKSkgewpAQCAtODgzLDYgKzkxMiw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5
VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8oUHJlZGljdE5vbmUp
LCBiYXNlLCBwcm9wZXJ0eSwgYWxpYXNlcy5sb29rdXBHZXRCeVZhbChiYXNlLCBwcm9wZXJ0eSkp
OwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5
VmFsKTsKKyAgICAgICAgICAgIGR5bmFtaWNhbGx5UHJlZGljdChnZXRCeVZhbCk7CiAgICAgICAg
ICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5VmFsKTsKIAogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC05MTIsNiArOTQyLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAgICBO
b2RlSW5kZXggZ2V0TWV0aG9kID0gYWRkVG9HcmFwaChHZXRNZXRob2QsIE9wSW5mbyhpZGVudGlm
aWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAgICAgICAgICAgICBzZXQoZ2V0SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRNZXRob2QpOworICAgICAgICAgICAgZHluYW1pY2Fs
bHlQcmVkaWN0KGdldE1ldGhvZCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldE1ldGhv
ZChnZXRNZXRob2QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCAr
PSBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjaykgKyBPUENPREVfTEVOR1RIKG9wX2dldF9i
eV9pZCk7CkBAIC05MjUsNiArOTU2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlJZCA9
IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJlZGljdE5v
bmUpLCBiYXNlKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBnZXRCeUlkKTsKKyAgICAgICAgICAgIGR5bmFtaWNhbGx5UHJlZGljdChnZXRCeUlkKTsK
ICAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0QnlJZChnZXRCeUlkKTsKIAogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X2lkKTsKQEAgLTEzNTAsNyArMTM4Miw3IEBAIGJvb2wg
cGFyc2UoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEqIGcKICAgICBVTlVTRURfUEFSQU0oY29k
ZUJsb2NrKTsKICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgIHJldHVybiBCeXRlQ29kZVBh
cnNlcihnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIGdyYXBoKS5wYXJzZSgpOworICAgIHJldHVybiBC
eXRlQ29kZVBhcnNlcihnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSwgZ3JhcGgpLnBhcnNlKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0J5dGVDb2RlUGFyc2VyLmgiCisjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIu
aCIKKyNpbmNsdWRlICJERkdQcm9wYWdhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2VudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVP
dGhlciB9OworaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhl
Y1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spCit7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICBHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNv
ZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChjb21waWxlTW9k
ZSA9PSBDb21waWxlRnVuY3Rpb24pCisgICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcyhj
YWxsZWVBcmdzRXhlYywgY29kZUJsb2NrKTsKKyAgICAKKyAgICBwcm9wYWdhdGUoZGZnLCBnbG9i
YWxEYXRhLCBjb2RlQmxvY2spOworICAgIAorICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGds
b2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGls
ZUZ1bmN0aW9uKSB7CisgICAgICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAg
ICAgICAKKyAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKGppdENvZGUsICpqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjb21waWxl
TW9kZSA9PSBDb21waWxlT3RoZXIpOworICAgICAgICBBU1NFUlQoIWppdENvZGVXaXRoQXJpdHlD
aGVjayk7CisgICAgICAgIAorICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlKGppdENvZGUpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUpCit7CisgICAgcmV0
dXJuIGNvbXBpbGUoQ29tcGlsZU90aGVyLCBleGVjLCAwLCBjb2RlQmxvY2ssIGppdENvZGUsIDAp
OworfQorCitib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0
ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK3sKKyAgICBy
ZXR1cm4gY29tcGlsZShDb21waWxlRnVuY3Rpb24sIGV4ZWMsIGNhbGxlZUFyZ3NFeGVjLCBjb2Rl
QmxvY2ssIGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0RyaXZlcl9oCisjZGVmaW5lIERGR0RyaXZlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CisKK25h
bWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19KSVQpCitib29sIHRyeUNvbXBpbGUoRXhl
Y1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpOworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiwgSklUQ29k
ZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyNlbHNl
CitpbmxpbmUgYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUm
KSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImKSB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiA5NDQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDEwIEBAIHZvaWQgR3JhcGg6OmR1
bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICB9CiAgICAgaWYgKG9wID09IEpTQ29uc3Rh
bnQpIHsKICAgICAgICAgcHJpbnRmKCIlcyQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5v
ZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICBwcmludGYoIiA9ICVzIiwgdmFsdWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAg
IH0KICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0Jy
YW5jaCgpIHx8IG5vZGUuaXNKdW1wKCkpIHsKQEAgLTE4NiwxNyArMTkwLDQ3IEBAIHZvaWQgR3Jh
cGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OnBy
ZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgR3JhcGg6OnByZWRpY3RB
cmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpIHsKLSAg
ICAgICAgSlNWYWx1ZSBhcmd1bWVudFZhbHVlID0gZXhlYy0+YXJndW1lbnQoYXJnIC0gMSk7Ci0g
ICAgICAgIGlmIChhcmd1bWVudFZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIG1fYXJndW1l
bnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJlZGljdEludDMyOwotICAgICAgICBlbHNl
IGlmIChhcmd1bWVudFZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50UHJl
ZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgaWYgKGV4ZWMpIHsK
KyAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3RkOjptaW4oZXhlYy0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBudW1iZXJPZkFyZ3Vt
ZW50czsgKythcmcpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9IGV4ZWMt
PmFyZ3VtZW50KGFyZyAtIDEpOworICAgICAgICAgICAgaWYgKGFyZ3VtZW50VmFsdWUuaXNJbnQz
MigpKQorICAgICAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUg
fD0gUHJlZGljdEludDMyOworICAgICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0Rv
dWJsZSgpKQorICAgICAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFs
dWUgfD0gUHJlZGljdERvdWJsZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyNpZiBFTkFCTEUo
RFlOQU1JQ19PUFRJTUlaQVRJT04pCisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUpOworCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sg
PSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+bV9udW1Q
YXJhbWV0ZXJzID49IDEpOworICAgIGZvciAoc2l6ZV90IGFyZyA9IDE7IGFyZyA8IHN0YXRpY19j
YXN0PHNpemVfdD4oY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpOyArK2FyZykgeworICAgICAg
ICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+dmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgaWYgKCFwcm9maWxlKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50Zigi
QXJndW1lbnQgcHJvZmlsZSBbJWx1XTogIiwgYXJnKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChz
dGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAg
IG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlLCBtYWtl
UHJlZGljdGlvbihnbG9iYWxEYXRhLCAqcHJvZmlsZSkpOworICAgICAgICAKKyNpZiBERkdfREVC
VUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGlj
dGlvblRvU3RyaW5nKG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUpKTsKKyNlbmRp
ZgogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CisjZW5kaWYKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDkgQEAKIAogI2lmIEVOQUJM
RShERkdfSklUKQogCi0jaW5jbHVkZSA8UmVnaXN0ZXJGaWxlLmg+Ci0jaW5jbHVkZSA8ZGZnL0RG
R05vZGUuaD4KKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisj
aW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMTM1
LDQzICsxMzYsNDUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fYmxvY2tzW2Jsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUJlZ2luKV07CiAgICAgfQogCi0gICAgdm9pZCBw
cmVkaWN0KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25T
b3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIGlm
IChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSArIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbiht
X2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbiht
X2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgICAgICB9IGVsc2UgaWYgKCh1bnNpZ25lZClvcGVyYW5k
IDwgbV92YXJpYWJsZVByZWRpY3Rpb25zLnNpemUoKSkKLSAgICAgICAgICAgIG1lcmdlUHJlZGlj
dGlvbihtX3ZhcmlhYmxlUHJlZGljdGlvbnNbb3BlcmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rp
b24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0
aW9uKG1fdmFyaWFibGVQcmVkaWN0aW9uc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlv
bihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQg
dmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291
cmNlKQorICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2dsb2JhbFZhclByZWRpY3Rpb25zLmZpbmQodmFyTnVtYmVyICsgMSk7CiAgICAgICAgIGlmIChp
dGVyID09IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZW5kKCkpIHsKICAgICAgICAgICAgIFByZWRp
Y3Rpb25TbG90IHByZWRpY3Rpb25TbG90OwotICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHBy
ZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvblNs
b3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAgICAg
ICAgICBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0aW9u
U2xvdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rp
b24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0
aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3Vy
Y2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3Rl
ZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisgICAgYm9vbCBwcmVk
aWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJj
ZSBzb3VyY2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9u
LCBzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVk
aWN0aW9uLCBzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOgotICAgICAgICAgICAgcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBw
cmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1
cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBwcmVkaWN0aW9uLCBzb3VyY2Up
OwogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0TWV0aG9kOgogICAgICAg
ICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0OgotICAgICAgICAgICAgbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMjE5LDEyICsyMjIsNDMgQEAgcHVibGljOgogICAgICAg
ICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8v
IEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCisgICAgYm9vbCBp
c0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQo
bm9kZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgfQorICAgIGJvb2wgaXNKU0NvbnN0YW50KE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5p
c0NvbnN0YW50KCk7CisgICAgfQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KENvZGVCbG9jayog
Y29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0
KG5vZGVJbmRleCkuaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGJvb2wg
aXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91YmxlQ29uc3RhbnQo
Y29kZUJsb2NrKTsKKyAgICB9CisgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZh
bHVlcyBmcm9tIG5vZGVzLgorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
YXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spOworICAgIH0KKyAgICBp
bnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVP
ZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgZG91YmxlIHZhbHVlT2ZEb3Vi
bGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZEb3VibGVDb25zdGFudChj
b2RlQmxvY2spOworICAgIH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgY29uc3QgY2hh
ciAqb3BOYW1lKE5vZGVUeXBlKTsKICNlbmRpZgogCi0gICAgdm9pZCBwcmVkaWN0QXJndW1lbnRU
eXBlcyhFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGF0
ZSosIENvZGVCbG9jayogY29kZUJsb2NrKTsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxv
Y2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hp
bGRyZW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA1LDYgKzkwNSw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5m
byA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxsID0g
bV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQ
YXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9D
aGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
NywzOSArMjA3LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0
byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdyYXBoKClbbm9kZUluZGV4XS5p
c0NvbnN0YW50KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29uc3Rh
bnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1
ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0Rv
dWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4g
aXNKU0NvbnN0YW50KG5vZGVJbmRleCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5p
c051bWJlcigpOwotICAgIH0KKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gZ3JhcGgoKS5pc0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlz
SlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlNDb25z
dGFudChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5v
ZGVJbmRleCk7IH0KKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5k
ZXgpOyB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5v
ZGVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBncmFwaCgpW25vZGVJbmRleF0uY29uc3RhbnROdW1i
ZXIoKTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleCkuZ2V0KCk7Ci0gICAgfQotICAg
IGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKLSAgICB9Ci0gICAg
ZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwot
ICAgIH0KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRl
eCk7IH0KKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5v
ZGVJbmRleCk7IH0KKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVCbG9j
aygpLCBub2RlSW5kZXgpOyB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBk
eW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBERkdfSklU
X0FTU0VSVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0
NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDYgKzU0LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpAQCAtMTk1LDYgKzE5OCw3IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RBcnJheSAKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAw
eDA0Owogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CiBz
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RUb3AgICAgPSAweDBmOwogc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgRHluYW1pY1ByZWRpY3Rpb25UYWcgPSAweDgwOwogc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwOwogCkBAIC0yMDIsNyArMjA2
LDcgQEAgZW51bSBQcmVkaWN0aW9uU291cmNlIHsgU3RhdGljUHJlZGljdGlvbgogCiBpbmxpbmUg
Ym9vbCBpc0NlbGxQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
ICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgflByZWRp
Y3RBcnJheSk7CisgICAgcmV0dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0Q2Vs
bCAmJiAhKHZhbHVlICYgfihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwogfQog
CiBpbmxpbmUgYm9vbCBpc0FycmF5UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAt
MjIyLDcgKzIyNiw3IEBAIGlubGluZSBib29sIGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0ZWQK
IAogaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH5QcmVk
aWN0TnVtYmVyKTsKKyAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZh
bHVlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNEeW5hbWljUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjMxLDYg
KzIzNSw0MiBAQCBpbmxpbmUgYm9vbCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlCiAgICAg
cmV0dXJuICEhKHZhbHVlICYgRHluYW1pY1ByZWRpY3Rpb25UYWcpOwogfQogCisjaWZuZGVmIE5E
RUJVRworaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBl
IHZhbHVlKQoreworICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKHZhbHVlKSkgeworICAgICAg
ICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7CisgICAgICAgIGNhc2UgUHJl
ZGljdE5vbmU6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWJvdHRvbSI7CisgICAgICAgIGNh
c2UgUHJlZGljdENlbGw6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWNlbGwiOworICAgICAg
ICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tYXJyYXkiOwor
ICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4taW50
MzIiOworICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gInAt
ZHluLW51bWJlciI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtZHlu
LXRvcCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2Ug
UHJlZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC1zdGF0LWJvdHRvbSI7CisgICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtY2VsbCI7CisgICAgY2FzZSBQcmVk
aWN0QXJyYXk6CisgICAgICAgIHJldHVybiAicC1zdGF0LWFycmF5IjsKKyAgICBjYXNlIFByZWRp
Y3RJbnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtaW50MzIiOworICAgIGNhc2UgUHJlZGlj
dE51bWJlcjoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtbnVtYmVyIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gInAtc3RhdC10b3AiOworICAgIH0KK30KKyNlbmRpZgorCiBpbmxpbmUg
UHJlZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGlj
dGVkVHlwZSByaWdodCkKIHsKICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSA9PSBp
c0R5bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSkKQEAgLTI0NSw5ICsyODUsMTIgQEAgaW5saW5lIFBy
ZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotaW5saW5lIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5cGUgcmln
aHQpCitpbmxpbmUgYm9vbCBtZXJnZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSBy
aWdodCkKIHsKLSAgICBsZWZ0ID0gc3RhdGljX2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0
aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KSwgcmlnaHQpKTsKKyAgICBQcmVkaWN0ZWRUeXBl
IG5ld1ByZWRpY3Rpb24gPSBzdGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19j
YXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpLCByaWdodCkpOworICAgIGJvb2wgcmVzdWx0ID0gbmV3
UHJlZGljdGlvbiAhPSBzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KTsKKyAgICBsZWZ0
ID0gbmV3UHJlZGljdGlvbjsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBpbmxpbmUgUHJlZGlj
dGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHR5cGUsIFByZWRpY3Rpb25Tb3Vy
Y2Ugc291cmNlKQpAQCAtMjU5LDIzICszMDIsMzEgQEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWFr
ZVByZWRpY3Rpb24oUHJlZAogICAgIHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBEeW5hbWljUHJl
ZGljdGlvbiA/IER5bmFtaWNQcmVkaWN0aW9uVGFnIDogMCk7CiB9CiAKLSNpZm5kZWYgTkRFQlVH
Ci1pbmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFs
dWUpCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQoraW5saW5lIFByZWRpY3RlZFR5cGUgbWFr
ZVByZWRpY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWYWx1ZVByb2ZpbGUm
IHByb2ZpbGUpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5vbmU6
Ci0gICAgICAgIHJldHVybiAicC1ib3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAg
ICAgIHJldHVybiAicC1jZWxsIjsKLSAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgcmV0
dXJuICJwLWFycmF5IjsKLSAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJw
LWludDMyIjsKLSAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC1udW1i
ZXIiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC10b3AiOwotICAgIH0KKyAgICBW
YWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3RhdGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVT
dGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRpc3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlz
dGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYg
KHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJu
IER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0
aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHlu
YW1pY1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0RG91YmxlOworICAgIAorICAgIGlmIChzdGF0aXN0
aWNzLmludDMycyArIHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisg
ICAgICAgIHJldHVybiBEeW5hbWljUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAg
CisgICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAg
ICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAorICAg
IGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0
dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdENlbGw7CisgICAgCisgICAgcmV0dXJu
IER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdFRvcDsKIH0KICNlbmRpZgogCkBAIC0zNTYs
NiArNDA3LDMzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7
CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1
ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVy
biBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgg
KyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0ludDMy
Q29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaXND
b25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNJbnQzMigpOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50
KGNvZGVCbG9jaykuaXNOdW1iZXIoKTsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCB2YWx1ZU9m
SW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2spLmFzSW50MzIoKTsKKyAgICB9CisKKyAgICBkb3VibGUgdmFsdWVP
ZkRvdWJsZUNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9m
SlNDb25zdGFudChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIH0KIAogICAg
IGJvb2wgaGFzTG9jYWwoKQogICAgIHsKQEAgLTQ3MCw3ICs1NDgsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihtX29wSW5mbzIpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQ
cmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChoYXNQcmVkaWN0aW9uKCkpOwogICAgICAgICAKQEAgLTQ3OCwxNiArNTU2LDE5IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgLy8gdG8gaGVhcCBsb2FkcyBhcyB3ZWxsIGFzIGNhbGxzIGlzIG5v
dCBwcm9maXRhYmxlLCBhcyB0aGVzZSBwcmVkaWN0aW9ucwogICAgICAgICAvLyBhcmUgd3Jvbmcg
dG9vIG9mdGVuLiBIZW5jZSwgdGhpcyBjb21wbGV0ZWx5IGlnbm9yZXMgc3RhdGljIHByZWRpY3Rp
b25zLgogICAgICAgICBpZiAoc291cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBp
ZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChzb3VyY2UgPT0g
RHluYW1pY1ByZWRpY3Rpb24pOwogICAgICAgICAKLSAgICAgICAgbV9vcEluZm8yIHw9IER5bmFt
aWNQcmVkaWN0aW9uVGFnIHwgcHJlZGljdGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBuZXdQ
cmVkaWN0aW9uID0gRHluYW1pY1ByZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOworICAgICAgICBi
b29sIHJlc3VsdCA9IG1fb3BJbmZvMiAhPSBuZXdQcmVkaWN0aW9uOworICAgICAgICBtX29wSW5m
bzIgfD0gbmV3UHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAg
ICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChoYXNSZXN1bHQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdf
SklUKSAmJiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByb3BhZ2F0
b3IgeworcHVibGljOgorICAgIFByb3BhZ2F0b3IoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2spCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9w
cm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgeworICAgICAgICBtX3ByZWRpY3Rpb25z
LnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAwOyBp
IDwgbV9ncmFwaC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQ
cmVkaWN0Tm9uZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhwb2ludCgpCisgICAgeworI2lm
IERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFs
IGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNv
cnRlZCBjb2RlLgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBw
cm9wYWdhdGVGb3J3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJv
cGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdp
bGwKKyAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiAgTG9vcHMgKGVzcGVjaWFsbHkgbmVz
dGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAgICAvLyBUaGlzIHBh
c3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhw
b2ludAorICAgICAgICAgICAgLy8gZm91bmQgYSBzb3VuZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0
LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIHByb3BhZ2F0ZUJhY2t3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hh
bmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRG8gYW5vdGhlciBmb3J3YXJkIHBhc3MgYmVjYXVzZSBmb3J3YXJkIHBhc3NlcyBhcmUgb24g
YXZlcmFnZSBtb3JlCisgICAgICAgICAgICAvLyBwcm9maXRhYmxlLgorICAgICAgICAgICAgbV9j
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7CisgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHNl
dFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID09IHByZWRpY3Rpb24pCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4
XSA9IHByZWRpY3Rpb247CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7
CisgICAgICAgIGlmIChERkc6Om1lcmdlUHJlZGljdGlvbihtX3ByZWRpY3Rpb25zW21fY29tcGls
ZUluZGV4XSwgcHJlZGljdGlvbikpCisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZU5vZGUoTm9kZSYgbm9kZSkKKyAgICB7CisgICAg
ICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOworICAgICAgICBzd2l0Y2ggKG9w
KSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3RJbnQzMiwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbiht
YWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAg
ICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwq
IGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZt
X2dsb2JhbERhdGEsIGNlbGwpKQorICAgICAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RBcnJheSwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdENlbGwsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RU
b3AsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGguZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkp
OworICAgICAgICAgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAg
ICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNldExvY2FsOiB7Cisg
ICAgICAgICAgICBtX2NoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0KG5vZGUubG9jYWwoKSwgbV9w
cmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgRHluYW1pY1By
ZWRpY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBC
aXRYb3I6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoK
KyAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgor
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIER5bmFt
aWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgVmFsdWVUb051bWJlcjogeworICAgICAgICAgICAgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAg
ICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdE51bWJlciwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9wcmVkaWN0
aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBt
X3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSAmJiBpc0R5bmFtaWNQcmVkaWN0aW9uKHJpZ2h0
KSkgeworICAgICAgICAgICAgICAgIGlmIChpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNO
dW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQz
MlByZWRpY3Rpb24obWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwg
RHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3Vi
bGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBj
YXNlIEFyaXRoU3ViOgorICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAg
ICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKGxlZnQpICYm
IGlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW50
MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAg
ICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgRHlu
YW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBEeW5hbWlj
UHJlZGljdGlvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBz
ZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFtaWNQcmVkaWN0
aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAg
Y2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAg
ICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIHNhZCwgYXMgd2UgZG9uJ3QgaGF2ZSBhIGJvb2xlYW4gcHJlZGlj
dGlvbiwgZXZlbiB0aG91Z2ggd2UgZWFzaWx5CisgICAgICAgICAgICAvLyBjb3VsZC4KKyAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgRHluYW1pY1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENvbnN0cnVj
dDogeworICAgICAgICAgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0
aW9uKCkpKQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9u
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3RDZWxsLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjog
eworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaC5nZXRHbG9i
YWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpOworICAgICAgICAgICAgaWYgKGlzRHlu
YW1pY1ByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICAgICAgbV9jaGFuZ2Vk
IHw9IG1fZ3JhcGgucHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBtX3ByZWRpY3Rp
b25zW25vZGUuY2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBEeW5hbWljUHJlZGljdGlv
bik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisjaWZuZGVm
IE5ERUJVRworICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3Qg
cmV0dXJuIGFueXRoaW5nLgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgREZHOjpKdW1wOgorICAgICAgICBjYXNlIEJyYW5j
aDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAg
Y2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CisgICAg
ICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Ly8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHByb2ZpbGluZyBmb3Ig
dGhlbSwgeWV0LgorICAgICAgICBjYXNlIFJlc29sdmU6CisgICAgICAgIGNhc2UgUmVzb2x2ZUJh
c2U6CisgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgcHJvcGFnYXRlRm9yd2FyZCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisg
ICAgICAgIHByaW50ZigiUHJvcGFnYXRpbmcgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwor
I2VuZGlmCisgICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8
IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQorICAgICAgICAgICAgcHJvcGFnYXRl
Tm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJv
cGFnYXRlQmFja3dhcmQoKQorICAgIHsKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBw
cmludGYoIlByb3BhZ2F0aW5nIGJhY2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYK
KyAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBpbGVJ
bmRleC0tID4gMDspCisgICAgICAgICAgICBwcm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgSlNHbG9iYWxE
YXRhJiBtX2dsb2JhbERhdGE7CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2Rl
QmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAKKyAgICBOb2RlSW5kZXggbV9jb21waWxlSW5k
ZXg7CisgICAgCisgICAgVmVjdG9yPFByZWRpY3RlZFR5cGUsIDE2PiBtX3ByZWRpY3Rpb25zOwor
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICB1bnNpZ25lZCBtX2NvdW50OworI2VuZGlmCisg
ICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCit2b2lkIHByb3BhZ2F0ZShHcmFwaCYgZ3Jh
cGgsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIEFTU0VSVChwcm9maWxlZEJsb2NrKTsKKyAgICAK
KyAgICBQcm9wYWdhdG9yIHByb3BhZ2F0b3IoZ3JhcGgsICpnbG9iYWxEYXRhLCBjb2RlQmxvY2ss
IHByb2ZpbGVkQmxvY2spOworICAgIHByb3BhZ2F0b3IuZml4cG9pbnQoKTsKKyAgICAKKyNpZiBE
RkdfREVCVUdfVkVSQk9TRQorICAgIGdyYXBoLmR1bXAoY29kZUJsb2NrKTsKKyNlbmRpZgorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkg
JiYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHUHJvcGFnYXRpb25faAorI2RlZmluZSBERkdQcm9wYWdhdGlvbl9oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSlNHbG9iYWxEYXRhOworCituYW1lc3BhY2Ug
REZHIHsKKworLy8gUHJvcGFnYXRlIGR5bmFtaWMgcHJlZGljdGlvbnMgZnJvbSB2YWx1ZSBzb3Vy
Y2VzIHRvIHZhcmlhYmxlcy4KKyNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCit2b2lk
IHByb3BhZ2F0ZShHcmFwaCYsIEpTR2xvYmFsRGF0YSosIENvZGVCbG9jayopOworI2Vsc2UKK2lu
bGluZSB2b2lkIHByb3BhZ2F0ZShHcmFwaCYsIEpTR2xvYmFsRGF0YSosIENvZGVCbG9jayopIHsg
fQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24g
OTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OTMsNiArNTkzLDkgQEAgdm9pZCBkZmdMaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlYywgQ2FsbExpbgogICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsK
ICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Z2xv
YmFsRGF0YSgpLCBjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNv
bWluZ0NhbGwoJmNhbGxMaW5rSW5mbyk7CiAgICAgfQogICAgIAogICAgIGlmIChraW5kID09IENv
ZGVGb3JDYWxsKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5o
CShyZXZpc2lvbiA5NDQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDYgKzIxOCw4IEBAIGlubGluZSBIYW5kbGVIZWFw
OjpOb2RlOjpOb2RlKEhhbmRsZUhlYXAKICAgICA6IG1faGFuZGxlSGVhcChoYW5kbGVIZWFwKQog
ICAgICwgbV93ZWFrT3duZXIoMCkKICAgICAsIG1fd2Vha093bmVyQ29udGV4dCgwKQorICAgICwg
bV9wcmV2KDApCisgICAgLCBtX25leHQoMCkKIHsKIH0KIApAQCAtMjI1LDYgKzIyNyw4IEBAIGlu
bGluZSBIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKFdURjo6U2VudGkKICAgICA6IG1faGFuZGxlSGVh
cCgwKQogICAgICwgbV93ZWFrT3duZXIoMCkKICAgICAsIG1fd2Vha093bmVyQ29udGV4dCgwKQor
ICAgICwgbV9wcmV2KDApCisgICAgLCBtX25leHQoMCkKIHsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDk0NDc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw2ICs1MTMsMTEgQEAg
dm9pZCBIZWFwOjptYXJrVGVtcFNvcnRWZWN0b3JzKEhlYXBSb290VgogICAgIH0KIH0KIAordm9p
ZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQoreworICAgIG1fc2xvdFZpc2l0b3IuaGFy
dmVzdFdlYWtSZWZlcmVuY2VzKCk7Cit9CisKIGlubGluZSBSZWdpc3RlckZpbGUmIEhlYXA6OnJl
Z2lzdGVyRmlsZSgpCiB7CiAgICAgcmV0dXJuIG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJl
Z2lzdGVyRmlsZSgpOwpAQCAtNTgxLDYgKzU4Niw4IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkK
ICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CiAgICAgdmlzaXRvci5k
cmFpbigpOwogCisgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisKICAgICAvLyBXZWFrIGhh
bmRsZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCwgYmVjYXVzZSB0aGVpciBvd25lcnMgdXNlIHRoZSBz
ZXQgb2YKICAgICAvLyBvcGFxdWUgcm9vdHMgdG8gZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4KICAg
ICBpbnQgbGFzdE9wYXF1ZVJvb3RDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDk0NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgbWFya1Jvb3RzKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3RlY3RlZE9iamVjdHMo
SGVhcFJvb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgbWFya1RlbXBTb3J0VmVjdG9ycyhIZWFw
Um9vdFZpc2l0b3ImKTsKKyAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIAog
ICAgICAgICB2b2lkKiB0cnlBbGxvY2F0ZShOZXdTcGFjZTo6U2l6ZUNsYXNzJik7CiAgICAgICAg
IHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6OlNpemVDbGFzcyYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiA5NDQ3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiw2ICsxMzYsMTcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQogI2VuZGlmCiB9
CiAKK3ZvaWQgU2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCit7CisgICAgd2hp
bGUgKG1fZmlyc3RXZWFrUmVmZXJlbmNlSGFydmVzdGVyKSB7CisgICAgICAgIFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX2ZpcnN0V2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKKyAg
ICAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlcio+KGN1cnJlbnQtPm1fbmV4dEFuZEZsYWcgJiB+MSk7CisgICAg
ICAgIGN1cnJlbnQtPm1fbmV4dEFuZEZsYWcgPSAwOworICAgICAgICBtX2ZpcnN0V2Vha1JlZmVy
ZW5jZUhhcnZlc3RlciA9IG5leHQ7CisgICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5j
ZXMoKnRoaXMpOworICAgIH0KK30KKwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogdm9pZCBN
YXJrU3RhY2s6OnZhbGlkYXRlU2V0KEpTVmFsdWUqIHZhbHVlcywgc2l6ZV90IGNvdW50KQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDk0NDc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUmVn
aXN0ZXIuaCIKICNpbmNsdWRlICJWVGFibGVTcGVjdHJ1bS5oIgorI2luY2x1ZGUgIldlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtOTMsNiArOTQsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQg
YXBwZW5kKFdyaXRlQmFycmllckJhc2U8VD4qKTsKICAgICAgICAgaW5saW5lIHZvaWQgYXBwZW5k
VmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qLCBzaXplX3QgY291bnQpOwogICAgICAg
ICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIHZvaWQgYXBw
ZW5kVW5iYXJyaWVyZWRQb2ludGVyKFQqKik7CisgICAgICAgIAogICAgICAgICBib29sIGFkZE9w
YXF1ZVJvb3Qodm9pZCopOwogICAgICAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKik7
CiAgICAgICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKQEAgLTEwMyw2ICsxMDcsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZUYWJsZVNwZWN0cnVtIG1fdmlzaXRlZFR5cGVDb3VudHM7
CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXItPm1fbmV4dEFuZEZsYWcgJiAxKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXItPm1fbmV4dEFuZEZsYWcgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9maXJzdFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpIHwgMTsKKyAgICAgICAgICAgIG1fZmlyc3RXZWFrUmVmZXJl
bmNlSGFydmVzdGVyID0gd2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKKyAgICAgICAgfQorCiAgICAg
cHJvdGVjdGVkOgogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBzdGF0aWMgdm9p
ZCB2YWxpZGF0ZVNldChKU1ZhbHVlKiwgc2l6ZV90KTsKQEAgLTEyMCw2ICsxMzIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgTWFya1N0YWNrQXJyYXk8TWFya1NldD4gbV9tYXJrU2V0czsK
ICAgICAgICAgTWFya1N0YWNrQXJyYXk8SlNDZWxsKj4gbV92YWx1ZXM7CiAgICAgICAgIEhhc2hT
ZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVz
IG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKyAgICAgICAgV2Vha1JlZmVy
ZW5jZUhhcnZlc3RlciogbV9maXJzdFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CiAgICAgICAgIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBwdWJsaWM6CkBAIC0xMzAsNiArMTQzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgTWFya1N0YWNrOjpNYXJrU3RhY2sodm9pZCoganNB
cnJheVZQdHIpCiAgICAgICAgIDogbV9qc0FycmF5VlB0cihqc0FycmF5VlB0cikKKyAgICAgICAg
LCBtX2ZpcnN0V2Vha1JlZmVyZW5jZUhhcnZlc3RlcigwKQogI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICAgICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxzZSkKICAg
ICAgICAgLCBtX2lzRHJhaW5pbmcoZmFsc2UpCkBAIC0yNTUsNiArMjY5LDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAgICAgICAgIG1fbWFya1NldHMuYXBwZW5kKE1hcmtTZXQoc2xvdCwg
c2xvdCArIGNvdW50KSk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBp
bmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcihUKiogc2xvdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChzbG90KTsKKyAgICAgICAgSlNDZWxsKiB2YWx1ZSA9ICpz
bG90OworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1
ZSk7CisgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmFwcGVu
ZChKU1ZhbHVlKiB2YWx1ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDk0NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOCBAQCBwdWJs
aWM6CiAgICAgU2xvdFZpc2l0b3Iodm9pZCoganNBcnJheVZQdHIpOwogCiAgICAgdm9pZCBkcmFp
bigpOwotCisgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAKIHByaXZhdGU6
CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCopOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVz
dGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJfaAorI2Rl
ZmluZSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyX2gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFya1N0YWNrOworY2xhc3MgU2xvdFZpc2l0b3I7CisK
K2NsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgPSAwOworICAgIAorcHJvdGVjdGVk
OgorICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoKQorICAgICAgICA6IG1fbmV4dEFuZEZsYWco
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfldlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOworICAgIGZy
aWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAKKyAgICB1aW50cHRyX3QgbV9uZXh0QW5kRmxh
ZzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDQ3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTMsNiArOTMsMTYgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2Rl
QgogewogfQogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKK3ZvaWQgSklUOjplbWl0
T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kIGtpbmQpCit7CisgICAgSnVt
cCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09
IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IDEgOiAzMCksIEFic29sdXRlQWRkcmVzcygmbV9jb2Rl
QmxvY2stPm1fZXhlY3V0ZUNvdW50ZXIpKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3Ag
OiBjdGlfb3B0aW1pemVfZnJvbV9yZXQpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBza2lw
T3B0aW1pemUubGluayh0aGlzKTsKK30KKyNlbmRpZgorCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
IHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKIHsKQEAgLTEwMiw2ICsxMTIsOCBAQCB2b2lk
IEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc3R1YkNhbGwuY2FsbCh0aW1lb3V0Q2hlY2tS
ZWdpc3Rlcik7CiAgICAgc3R1YkNhbGwuZ2V0QXJndW1lbnQoMCwgcmVnVDEsIHJlZ1QwKTsgLy8g
cmVsb2FkIGxhc3QgcmVzdWx0IHJlZ2lzdGVycy4KICAgICBza2lwVGltZW91dC5saW5rKHRoaXMp
OworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2sp
OwogfQogI2Vsc2UKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKQEAgLTExMSw2ICsxMjMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc2tpcFRpbWVvdXQubGluayh0
aGlzKTsKIAogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAKKyAgICBlbWl0T3B0
aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKIH0KICNlbmRpZgogCkBAIC02
MjMsNyArNjM3LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgog
CiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5j
dGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLQorICAgIAogICAgIHJldHVybiBK
SVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7
CiB9CiAKQEAgLTYzNyw2ICs2NTEsOSBAQCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBj
YWxsZWUsIENvCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKICAg
ICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8t
PmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5ob3RQYXRoT3Ro
ZXIsIGNvZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAg
ICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsTGlua0luZm8pOwog
ICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0
cnkgdG8gbGluay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ0NzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NzIsNiArOTcyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBMb2FkcyB0aGUgY2hh
cmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcgaW50byBkc3QuCiAgICAg
ICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAgICAKKyAgICAgICAgZW51bSBPcHRp
bWl6YXRpb25DaGVja0tpbmQgeyBMb29wT3B0aW1pemF0aW9uQ2hlY2ssIFJldE9wdGltaXphdGlv
bkNoZWNrIH07CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgdm9pZCBl
bWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kKTsKKyNlbHNlCisgICAg
ICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2luZCkgeyB9
CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIHZvaWQgZW1pdFRpbWVvdXRDaGVjaygpOwogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKHVuc2ln
bmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZhcmFyZ3NTbG93Q2FzZShJCiAKIHZvaWQgSklU
OjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVt
aXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgdW5z
aWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAogICAgIGVtaXRM
b2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTExOCw2ICsxMjAsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3JldF9vYmpl
Y3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRP
cHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25l
ZCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDk0NDc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIzICsyNyw1
MCBAQAogI2RlZmluZSBKSVRDb2RlX2gKIAogI2lmIEVOQUJMRShKSVQpCi0KICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNs
YXNzIFJlZ2lzdGVyRmlsZTsKKyNlbmRpZgogICAgIAogICAgIGNsYXNzIEpJVENvZGUgeworI2lm
IEVOQUJMRShKSVQpCiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVS
ZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CisjZWxz
ZQorICAgICAgICBKSVRDb2RlKCkgeyB9CisjZW5kaWYKICAgICBwdWJsaWM6CiAgICAgICAgIGVu
dW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQgfTsKLQorICAg
ICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCisgICAgICAgIHsK
KyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICAgICAgcmV0dXJuIEJhc2Vs
aW5lSklUOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisjZW5kaWYKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBKSVRUeXBlIG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqaXRUeXBlLCBqaXRUeXBlID09IEJhc2Vs
aW5lSklUIHx8IGppdFR5cGUgPT0gREZHSklUKTsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7
CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgSklUQ29kZSgp
CiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNTMsNyArODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQot
CisgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yICEoKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAt
MTI0LDEwICsxNTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBDb2RlUmVmIG1fcmVm
OwogICAgICAgICBKSVRUeXBlIG1faml0VHlwZTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAg
IH07CiAKIH07CiAKICNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiArNDUyLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKElucwogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBlbWl0
T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAogICAgIEFTU0VS
VChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7CiAgICAgQVNTRVJUKHJlZ1QxICE9IHJldHVy
blZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVyICE9IGNhbGxG
cmFtZVJlZ2lzdGVyKTsKQEAgLTQ3Miw2ICs0NzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQo
SW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhp
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRp
b25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgQVNTRVJUKGNhbGxGcmFt
ZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJuVmFsdWVSZWdp
c3Rlcik7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZyYW1lUmVnaXN0
ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9u
IDk0NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MTYsNiArMTgxNiwzMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF9jaGVja19oYXNfCiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCitE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX2xvb3ApCit7CisgICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
ID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2Rl
QmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAo
ZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBp
bGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgb3B0aW1pemVfZnJvbV9yZXQpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNo
YWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6
ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gcmV0IGZhaWxl
ZC5cbiIpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfaW5z
dGFuY2VvZikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NDQ3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIz
LDYgKzQyMyw4IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJf
b2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVC
IGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3AoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX3Jl
dChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jYWxs
X2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBj
dGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2
b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9qaXRDb21waWxlKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjYgKzI4LDE2IEBACiAKICNpbmNsdWRl
ICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2lu
Y2x1ZGUgIlVTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgotI2luY2x1ZGUgIkRG
R0pJVENvbXBpbGVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNz
SW5mbyBFeGVjdXRhYmxlQmFzZTo6c19pbmZvID0geyAiRXhlY3V0YWJsZSIsIDAsIDAsIDAgfTsK
IAotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCB0cnlE
RkdDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUm
IGppdENvZGUpCi17Ci0jaWYgRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQotICAgIC8vIEZJ
WE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVyIHNjYW5uaW5n
IHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFyZ2V0cy4KLSAgICBpZiAoY29k
ZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0KLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIERGRzo6R3JhcGggZGZnKGNv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7Ci0gICAgaWYg
KCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIERGRzo6SklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBj
b2RlQmxvY2spOwotICAgIGRhdGFGbG93SklULmNvbXBpbGUoaml0Q29kZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlD
aGVjaykKLXsKLSNpZiBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0gICAgLy8gRklYTUU6
IE5vIGZsb3cgY29udHJvbCB5ZXQgc3VwcG9ydGVkLCBkb24ndCBib3RoZXIgc2Nhbm5pbmcgdGhl
IGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBhbnkganVtcCB0YXJnZXRzLgotICAgIGlmIChjb2RlQmxv
Y2stPm51bWJlck9mSnVtcFRhcmdldHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9OUykKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgREZHOjpHcmFwaCBkZmcoY29kZUJs
b2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKLSAgICBpZiAoIXBh
cnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGNhbGxlZUFyZ3NFeGVjKQotICAgICAgICBkZmcucHJlZGljdEFyZ3VtZW50VHlw
ZXMoY2FsbGVlQXJnc0V4ZWMpOwotCi0gICAgREZHOjpKSVRDb21waWxlciBkYXRhRmxvd0pJVChn
bG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7Ci0gICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0
aW9uKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGUoRXhl
Y1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1zdGF0aWMg
Ym9vbCB0cnlERkdDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAK
IHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTE2Niw4ICsxMTYsMTggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUo
RQogewogfQogCitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgQVNT
RVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQo
ISFtX2V2YWxDb2RlQmxvY2spOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1f
ZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAg
ICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENv
ZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNT
RVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAKLUpTT2JqZWN0
KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBKU09iamVjdCogZXhjZXB0aW9u
ID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwpAQCAtMTgzLDI2ICsxNDMsNDEgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxl
SW50ZXJuYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5O
b2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jayk7
Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywg
Z2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxE
ZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwg
bV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpKSk7
CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxv
Y2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVy
SklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9ldmFsQ29kZUJsb2NrID0gYWRv
cHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92
aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5y
ZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2Rl
LCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwg
ISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0
aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24p
KSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAg
ICAgIG1fZXZhbENvZGVCbG9jay5jbGVhcigpOworICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+cmVsZWFz
ZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEo
KTsKKyAgICBtX2V2YWxDb2RlQmxvY2stPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsK
LSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGUoZXhlYywgbV9ldmFsQ29k
ZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxl
ZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICBpZiAoaml0VHlw
ZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5
Q29tcGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwpOwor
ICAgICAgICBpZiAoZGZnQ29tcGlsZWQpCisgICAgICAgICAgICBBU1NFUlQoIW1fZXZhbENvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSB8fCAhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5o
YXNJbmNvbWluZ0NhbGxzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2V2
YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBp
cyBhbHJlYWR5IGFuIGFsdGVybmF0aXZlIHBpZWNlIG9mIGNvZGUgY29tcGlsZWQgd2l0aCBhIGRp
ZmZlcmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCwgc28gd2UgY2FuIHNpbGVudGx5IGZhaWwu
CisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxF
dmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAg
ICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRh
LCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVk
Q29kZSgpKQogICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUoKTsK
ICNlbmRpZgorICAgICAgICBtX2V2YWxDb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9y
Q2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0yNjEs
MTAgKzIzNiwxOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAg
ICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpj
b21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgQVNT
RVJUKCFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCku
ZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsK
KyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmdl
dEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29t
cGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVCht
X3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fcHJvZ3Jh
bUNvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOworfQogCitKU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQorewogICAgIEpTT2Jq
ZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0yNzcsMjUgKzI2MSw0MCBAQCBKU09i
amVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAg
ICAKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9j
ayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsK
LSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0
ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFs
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpKSk7CisgICAg
T3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2su
cmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRv
cHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksICEhbV9wcm9ncmFt
Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdD
b21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAg
IGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX3By
b2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJl
bGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7
CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCiAgICAgcHJvZ3JhbU5vZGUtPmRl
c3Ryb3lEYXRhKCk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4
ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAg
IGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29t
cGlsZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBt
X2ppdENvZGVGb3JDYWxsKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAg
ICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAg
IG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0
YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5y
ZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2Nr
LT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGls
ZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKTsK
KyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5
dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fcHJv
Z3JhbUNvZGVCbG9jay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgbV9wcm9n
cmFtQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cigpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMzQyLDcgKzM0MSwyOSBAQCB2b2lkIFBy
b2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQog
Ci1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUq
IGNhbGxlZUFyZ3NFeGVjKQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpCit7CisgICAgQVNTRVJUKGV4ZWMtPmds
b2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9j
a0ZvckNhbGwpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAg
ZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxs
ZWVBcmdzRXhlYywgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRK
SVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIHJldHVy
biBlcnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGlt
aXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSkKK3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxP
YmplY3QpOworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBKU09i
amVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklU
VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxl
Rm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRU
aWVySklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NF
UlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitK
U09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNh
bGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFp
bk5vZGUtPmdsb2JhbERhdGE7CkBAIC0zNTgsMTEgKzM3OSwxMiBAQCBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFTU0VSVCgh
bV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihu
ZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNv
dXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7Ci0gICAg
T3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2Rl
R2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNhbGwt
PnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkpKTsKKyAgICBPd25QdHI8
Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxlYXNl
KCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0g
IXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihu
ZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNv
dXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlLCBwcmV2aW91
c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdl
bmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVD
aGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tG
b3JDYWxsLmdldCgpLCAhIW1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVj
b2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6
Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2Vu
ZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAg
IG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxv
Y2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBi
b2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAg
LTM3MywxNyArMzk1LDMxIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xU
YWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNh
bGwtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlm
IChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21w
aWxlZCA9IHRyeURGR0NvbXBpbGVGdW5jdGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2Rl
QmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRm
Z0NvbXBpbGVkID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJ
VCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlRnVuY3Rpb24oZXhl
YywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9y
Q2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgaWYgKGRmZ0Nv
bXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2
ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKS0+
dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1f
Y29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+
KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAg
ICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAg
ICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1i
b2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+
Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKTsKLQorICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcp
CiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQog
ICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5zZXRKSVRDb2RlKG1faml0
Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oY2FsbGVlQXJnc0V4ZWMpOwpAQCAtNDAzLDggKzQzOSwxMCBA
QCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
K0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5h
bChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29k
ZTo6SklUVHlwZSBqaXRUeXBlKQogeworICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKKyAgICAK
ICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5
Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJz
LmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAm
ZXhjZXB0aW9uKTsKQEAgLTQxOSwxMSArNDU3LDEyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
Y29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBhZG9wdFB0
cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3Qs
IHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRydWUpKTsKLSAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkpKTsK
KyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90
dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9u
Q29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9m
ZnNldCgpLCB0cnVlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8
Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0
b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5z
eW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgISFtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6
aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsK
ICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAg
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5k
ZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTQzNCwx
NCArNDczLDMwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAg
ICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRh
YmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOworICAgIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIG1faml0Q29k
ZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwg
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCksICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjayk7CisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAg
Ly8gRklYTUU6IE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSBjb25zdHJ1Y3RvcnMgd2l0aCBE
RkcuCisgICAgICAgIGlmIChkZmdDb21waWxlZCkgeworICAgICAgICAgICAgaWYgKG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAg
ICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zaGFyZWRTeW1i
b2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5O
b2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVy
YXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5kaXNjYXJk
Qnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk0NDc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDYsMTAgKzMwNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChl
eGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09i
amVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAg
ICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUp
OworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hh
aW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFl
cnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKICAgICAgICAgRXZhbENvZGVCbG9jayYgZ2Vu
ZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zNDQsNyArMzQ2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsK
ICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJv
b2wpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2Nv
cGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHVubGlua0Nh
bGxzKCk7CiAKQEAgLTM2OSwxMSArMzcxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fcHJvZ3JhbUNv
ZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBz
Y29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwo
ZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAg
ICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgICAg
IHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisKICAgICAgICAgUHJvZ3JhbUNv
ZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTQwMyw3ICs0MDcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAg
ICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAK
LSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWlu
Tm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsK
IApAQCAtNDUwLDExICs0NTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAg
SlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDYWxs
KQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBz
Y29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMpOworICAgICAgICAgICAgICAgIGVycm9yID0g
Y29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4
ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9y
ID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAg
ICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVj
U3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsK
KwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CkBAIC00NzEsMTEgKzQ3NywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCku
ZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwog
ICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAg
ICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9k
ZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwo
ZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAg
ICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgICAg
ICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKwog
ICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwpAQCAtNTAxLDYgKzUw
OSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9yQ29u
c3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gY29tcGlsZU9wdGltaXplZEZvciBzaG91bGQgb25seSBi
ZSBjYWxsZWQgd2l0aCBhIGNhbGxmcmFtZSBzZXQgdXAgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLAor
ICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBtYWtlIHNwZWN1bGF0aXZlIG9wdGltaXphdGlv
bnMgYmFzZWQgb24gdGhlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxs
ZWUoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKCZKU0Z1
bmN0aW9uOjpzX2luZm8pKTsKKyAgICAgICAgICAgIEFTU0VSVChhc0Z1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21w
aWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29wZUNoYWluTm9kZSwgZXhlYyk7CisgICAgICAg
ICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIHJldHVy
biBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENv
ZGVGb3JDYWxsKQpAQCAtNTQ5LDggKzU3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
Y29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFt
ZXRlcnMqLCBib29sKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0Fy
Z3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAKLSAgICAgICAgSlNPYmplY3Qq
IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjKTsKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09i
amVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSos
IEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUpOworICAgICAgICBK
U09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2Ny
aXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2Fw
dHVyZWRWYXJpYWJsZXMgOiAzMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVmFsdWUuY3BwCShyZXZpc2lvbiA5NDQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgY2hh
ciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKQogICAgIGVsc2UgaWYgKGlzSW50MzIoKSkKICAgICAg
ICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJJbnQzMjogJWQiLCBhc0ludDMyKCkpOwog
ICAgIGVsc2UgaWYgKGlzRG91YmxlKCkpCi0gICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBz
aXplLCAiRG91YmxlOiAlbGYiLCBhc0RvdWJsZSgpKTsKKyAgICAgICAgc25wcmludGYoZGVzY3Jp
cHRpb24sIHNpemUsICJEb3VibGU6ICVsZiwgJWx4IiwgYXNEb3VibGUoKSwgcmVpbnRlcnByZXRE
b3VibGVUb0ludHB0cihhc0RvdWJsZSgpKSk7CiAgICAgZWxzZSBpZiAoaXNDZWxsKCkpCiAgICAg
ICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiQ2VsbDogJXAiLCBhc0NlbGwoKSk7CiAg
ICAgZWxzZSBpZiAoaXNUcnVlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCShyZXZpc2lvbiA5NDQ3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZv
cm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTYwLDkgKzk2MCwyMSBAQAogI2RlZmluZSBFTkFCTEVf
REZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9USUVSRURfQ09NUElMQVRJ
T04pICYmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9O
IDEKKyNlbmRpZgorCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0
LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX1ZB
TFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9S
TShNQUMpCi0jZGVmaW5lIEVOQUJMRV9WQUxVRV9QUk9GSUxFUiAwCisjZGVmaW5lIEVOQUJMRV9W
QUxVRV9QUk9GSUxFUiAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9EWU5BTUlDX09Q
VElNSVpBVElPTikKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKSAmJiBFTkFCTEUoVkFM
VUVfUFJPRklMRVIpCisjZGVmaW5lIEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiAxCisjZWxz
ZQorI2RlZmluZSBFTkFCTEVfRFlOQU1JQ19PUFRJTUlaQVRJT04gMAorI2VuZGlmCiAjZW5kaWYK
IAogI2lmICFkZWZpbmVkKEVOQUJMRV9WRVJCT1NFX1ZBTFVFX1BST0ZJTEUpICYmIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxM
aW5rZWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50
aW5lbExpbmtlZExpc3QuaAkocmV2aXNpb24gOTQ0NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNCArNDEs
NjMgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGVudW0gU2VudGluZWxUYWcgeyBTZW50aW5lbCB9Owog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gY2xhc3MgU2VudGluZWxMaW5rZWRMaXN0IHsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCYXNpY1Jhd1NlbnRpbmVsTm9kZSB7CiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiBOb2RlKiBpdGVyYXRvcjsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZShT
ZW50aW5lbFRhZykKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKCkKKyAgICAgICAgOiBt
X25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UHJldihCYXNpY1Jhd1NlbnRpbmVsTm9kZSogcHJldikgeyBtX3ByZXYgPSBwcmV2OyB9
CisgICAgdm9pZCBzZXROZXh0KEJhc2ljUmF3U2VudGluZWxOb2RlKiBuZXh0KSB7IG1fbmV4dCA9
IG5leHQ7IH0KKyAgICAKKyAgICBUKiBwcmV2KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1f
cHJldik7IH0KKyAgICBUKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fbmV4dCk7
IH0KKyAgICAKKyAgICBib29sIGlzT25MaXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VCghIW1fcHJldiA9PSAhIW1fbmV4dCk7CisgICAgICAgIHJldHVybiAhIW1fcHJldjsKKyAgICB9
CisgICAgCisgICAgdm9pZCByZW1vdmUoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmFzaWNSYXdT
ZW50aW5lbE5vZGUqIG1fbmV4dDsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9wcmV2Owor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGUgPSBUPiBjbGFzcyBT
ZW50aW5lbExpbmtlZExpc3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAK
ICAgICBTZW50aW5lbExpbmtlZExpc3QoKTsKIAotICAgIHZvaWQgcHVzaChOb2RlKik7Ci0gICAg
c3RhdGljIHZvaWQgcmVtb3ZlKE5vZGUqKTsKKyAgICB2b2lkIHB1c2goVCopOworICAgIHN0YXRp
YyB2b2lkIHJlbW92ZShUKik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpOwogICAgIGl0ZXJhdG9y
IGVuZCgpOwogCiBwcml2YXRlOgotICAgIE5vZGUgbV9oZWFkU2VudGluZWw7Ci0gICAgTm9kZSBt
X3RhaWxTZW50aW5lbDsKKyAgICBSYXdOb2RlIG1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUg
bV90YWlsU2VudGluZWw7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNl
bnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiB2b2lkIEJhc2ljUmF3U2VudGluZWxOb2RlPFQ+OjpyZW1vdmUoKQoreworICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxULCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxUPiA+OjpyZW1vdmUo
c3RhdGljX2Nhc3Q8VCo+KHRoaXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFJhd05vZGU+IGlubGluZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OlNlbnRp
bmVsTGlua2VkTGlzdCgpCiAgICAgOiBtX2hlYWRTZW50aW5lbChTZW50aW5lbCkKICAgICAsIG1f
dGFpbFNlbnRpbmVsKFNlbnRpbmVsKQogewpAQCAtNjksMjEgKzEwOCwyNCBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsCiAgICAgbV90YWlsU2VudGluZWwuc2V0TmV4
dCgwKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50
aW5lbExpbmtlZExpc3Q8Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6
YmVnaW4oKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0
eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBSYXdOb2RlPjo6YmVnaW4oKQogewotICAgIHJldHVybiBtX2hlYWRTZW50
aW5lbC5uZXh0KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX2hlYWRTZW50aW5lbC5u
ZXh0KCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHR5cGVuYW1lIFNl
bnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+
OjplbmQoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0
eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBSYXdOb2RlPjo6ZW5kKCkKIHsKLSAgICByZXR1cm4gJm1fdGFpbFNlbnRp
bmVsOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4oJm1fdGFpbFNlbnRpbmVsKTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxO
b2RlPjo6cHVzaChOb2RlKiBub2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJh
d05vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6cHVzaChU
KiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKLSAgICBOb2RlKiBwcmV2ID0gJm1faGVhZFNl
bnRpbmVsOwotICAgIE5vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgQVNT
RVJUKCFub2RlLT5wcmV2KCkpOworICAgIEFTU0VSVCghbm9kZS0+bmV4dCgpKTsKKyAgICAKKyAg
ICBSYXdOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUqIG5leHQgPSBt
X2hlYWRTZW50aW5lbC5uZXh0KCk7CiAKICAgICBub2RlLT5zZXRQcmV2KHByZXYpOwogICAgIG5v
ZGUtPnNldE5leHQobmV4dCk7CkBAIC05MiwxNyArMTM0LDI1IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBOb2RlPiBpbmxpbmUgdm9pZCBTZW4KICAgICBuZXh0LT5zZXRQcmV2KG5vZGUpOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PE5v
ZGU+OjpyZW1vdmUoTm9kZSogbm9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBS
YXdOb2RlPiBpbmxpbmUgdm9pZCBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OnJlbW92
ZShUKiBub2RlKQogewotICAgIE5vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7Ci0gICAgTm9kZSog
bmV4dCA9IG5vZGUtPm5leHQoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCEhbm9k
ZS0+cHJldigpKTsKKyAgICBBU1NFUlQoISFub2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05v
ZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7CisgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm5leHQo
KTsKIAogICAgIHByZXYtPnNldE5leHQobmV4dCk7CiAgICAgbmV4dC0+c2V0UHJldihwcmV2KTsK
KyAgICAKKyAgICBub2RlLT5zZXRQcmV2KDApOworICAgIG5vZGUtPnNldE5leHQoMCk7CiB9CiAK
IH0KIAordXNpbmcgV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTsKIHVzaW5nIFdURjo6U2VudGlu
ZWxMaW5rZWRMaXN0OwogCiAjZW5kaWYK
</data>
<flag name="commit-queue"
          id="102615"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106254</attachid>
            <date>2011-09-03 01:12:41 -0700</date>
            <delta_ts>2011-09-03 01:19:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>dynopt_patch_4.diff</filename>
            <type>text/plain</type>
            <size>120381</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3Rlc3RzL3Y4LXY2L3Y4LWNyeXB0by5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1N1blNwaWRlci90ZXN0cy92OC12Ni92
OC1jcnlwdG8uanMJKHJldmlzaW9uIDk0NDc4KQorKysgUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlk
ZXIvdGVzdHMvdjgtdjYvdjgtY3J5cHRvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNiArMzQy
LDggQEAgZnVuY3Rpb24gYm5wTFNoaWZ0VG8obixyKSB7CiAgIGZvcihpID0gZHMtMTsgaSA+PSAw
OyAtLWkpIHJfYXJyYXlbaV0gPSAwOwogICByX2FycmF5W2RzXSA9IGM7CiAgIHIudCA9IHRoaXMu
dCtkcysxOworLy8gICAgcHJpbnQoImRzID0gIitkcyk7CisvLyAgICBwcmludCgici50ID0gIity
LnQpOwogICByLnMgPSB0aGlzLnM7CiAgIHIuY2xhbXAoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc3IEBACisyMDExLTA5LTAzICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSmF2YVNjcmlwdENvcmUgZG9l
cyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgdG8gaGF2
ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBhIHBhcnRpY3Vs
YXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0b3JlZCBpbgorICAgICAgICBk
ZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2RlQmxvY2tzIGFyZSBvcHRpbWl6
ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNvdW50ZXIpIHRoYXQgaXMgaW5j
cmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3VlcyBiZWNvbWVzIHBvc2l0aXZl
LiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bworICAgICAgICB0aGUgb2xkIENv
ZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAgICBUaGUgREZHIGNhbiBub3cg
cHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMsIGFuZAorICAgICAgICBwcm9w
YWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0IHRoZSBuZXcgcGhhc2Ugd2hp
bGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIGEgREZHRHJp
dmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBzdWxhdGVzIGhvdyB0byBydW4g
dGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgdHVybmVkIG9mZiBi
eSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9ybWFuY2UKKyAgICAgICAgd2lu
IG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0byBhbmQgcmljaGFyZHMgYnkK
KyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBzdGlsbCBkb2VzIG5vdCBkbyBh
cyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAgTm90YWJseSwgdGhlIERGRyBi
YWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlzIGxhcmdlbHkgb2JsaXZpb3Vz
IHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFpbGFibGUKKyAgICAgICAgdG8g
aXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYgKHRoZSBkZWZhdWx0KSwgdGhp
cyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hBZGQzMik6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
bGVhckV2YWxDYWNoZSk6CisgICAgICAgIChKU0M6OnJlcGxhY2VFeGlzdGluZ0VudHJpZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKToKKyAgICAg
ICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpF
dmFsQ29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJs
b2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmNvbXBp
bGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1p
emVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpHbG9iYWxD
b2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OlByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFs
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OkZ1bmN0aW9uQ29k
ZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpT
Qzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21w
dXRlU3RhdGlzdGljcyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpkeW5hbWlj
YWxseVByZWRpY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGVGdW5jdGlv
bik6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
Ojp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRp
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0R2xvYmFsVmFyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmlzSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzSW50MzJDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzRG91YmxlQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzSlNDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzSW50MzJDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzRG91YmxlQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OmlzTnVtYmVyUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
cHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjptZXJnZVByZWRpY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNJ
bnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0RvdWJsZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpwcmVkaWN0KToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRpb24uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpQcm9wYWdhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6c2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFn
YXRvcjo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpw
cm9wYWdhdGVOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVG
b3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVCYWNrd2Fy
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHUHJv
cGFnYXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnTGlua0Zvcik6
CisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmg6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6
Ok5vZGU6Ok5vZGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFRpbWVvdXRD
aGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmtGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6SklUQ29kZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmJv
dHRvbVRpZXJKSVQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjp0b3BUaWVySklUKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6bmV4dFRpZXJKSVQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5j
cHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBqaXQv
SklUU3R1YnMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAo
SlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkV2
YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAq
IHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvcik6CisgICAgICAgICog
d3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oOgorICAg
ICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6QmFzaWNSYXdTZW50aW5lbE5vZGUpOgor
ICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0UHJldik6CisgICAgICAgIChX
VEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpzZXROZXh0KToKKyAgICAgICAgKFdURjo6QmFzaWNS
YXdTZW50aW5lbE5vZGU6OnByZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTo6bmV4dCk6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjppc09uTGlzdCk6
CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6OjpTZW50aW5lbExpbmtl
ZExpc3QpOgorICAgICAgICAoV1RGOjo6OmJlZ2luKToKKyAgICAgICAgKFdURjo6OjplbmQpOgor
ICAgICAgICAoV1RGOjo6OnB1c2gpOgorCiAyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHZhcmlhYmxlIHByZWRpY3Rpb25zIG9ubHkgd29y
ayBmb3IgbG9jYWwgdmFyaWFibGVzLCBub3QgdGVtcG9yYXJpZXMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk0NDc4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsNyBAQCBTRVQo
SmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYXNzZW1ibGVyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvZGUiCiAg
ICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9ieXRlY29tcGlsZXIiCisgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9kZmciCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9oZWFwIgogICAgICIk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGVidWdnZXIiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElS
fS9pbnRlcnByZXRlciIKQEAgLTU0LDcgKzU1LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2
YXRpb24uY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCi0KKyAgICAKICAg
ICBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCiAgICAgaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCiAgICAgaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk0NDc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw2ICsxMDIsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oIFwKQEAgLTExNiw2ICsxMTgsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lz
dGVyQmFuay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagko
cmV2aXNpb24gOTQ0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTU1MCw2ICsxNTUwLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4K
KyAgICAgICAgICAgICAgICA8RmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJk
ZmciCisgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGRmZ1xERkdEcml2ZXIuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAg
ICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgIDwvRmlsdGVyPgog
CQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJyIgogCQkJPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDk0NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDEwIEBACiAJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsg
fTsKIAkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThE
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsK
KwkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVEMUEw
MEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi87IH07CisJCTBGRDNDODI2MTQxMTVENDAw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
Ki87IH07CisJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjQxNDEx
NUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmggKi87IH07CisJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMzc1LDcgKzM3
OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3MjcwRUQxQ0U2OTAwRjFG
NjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2OUEwNzJCMEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdp
c3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5oICovOyB9OwogCQk5NjlBMDcy
QzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyOTBFRDFDRTY5MDBGMUY2ODEgLyog
U2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0JCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IH07CisJCTk2
OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8q
IENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3Ry
aWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5QTA3OTcwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5
QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29k
ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovOyB9OwogCQk5NjlB
MDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJ
bnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5LDYgKzc4MywxMCBAQAogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFi
bGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0
aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4
MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
cm9wYWdhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNDODI0MTQx
MTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQcm9wYWdhdGlvbi5oOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAv
KiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9j
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEwIEBACiAJCTg2RUM5REIzMTMyOERGNDQw
MDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oICovLAor
CQkJCTBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi8sCisJ
CQkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovLAorCQkJCTBGRDND
ODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTg2RUNBNEYwMTMy
RUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCAqLywKIAkJCQk4NkVDOURCNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwICovLAogCQkJCTg2RUM5REI1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovLApAQCAtMjYxNyw2ICsyNjI5
LDggQEAKIAkJCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkQzQzgyNzE0MTE1RDRGMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8q
IFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzMsNiArMzA0Nyw4IEBA
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0M4MjYxNDExNUQ0MDAw
RkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0MDUx
MUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
ODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDk0NDc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEsMTcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAg
ICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3Rl
ZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworI2lmIENQVShYODZfNjQp
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgWDg2UmVnaXN0ZXJzOjpy
MTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyMTEpKTsKKyNl
bHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRlc3QubV9wdHIp
OworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRp
b24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgYWRk
MzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDkgKzE0MDEsMTAg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1Db2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xU
YWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0ds
b2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBi
b29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBv
cHRpbWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0
ZXJzKDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAt
MTQyMiw2ICsxNDIzLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCiAgICAgLCBtX3NvdXJjZU9mZnNldChz
b3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bVRhYikKKyAgICAsIG1fYWx0ZXJu
YXRpdmUoYWx0ZXJuYXRpdmUpCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKIApAQCAtMTQ0MSwx
NSArMTQ0MywxOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwgaSArIDEpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogIiwgcHJvZmlsZS0+Ynl0ZWNvZGVP
ZmZzZXQpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAic2FtcGxl
cyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJheSA9ICV1XG4i
LAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpLAotICAgICAgICAg
ICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZJbnQzMigpLAotICAgICAgICAgICAgICAgIHBy
b2ZpbGUtPnByb2JhYmlsaXR5T2ZEb3VibGUoKSwKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5w
cm9iYWJpbGl0eU9mQ2VsbCgpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5
T2ZBcnJheSgpKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRlcnIpOworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQogI2VuZGlmCisgICAgCisgICAgLy8gV2Ugc2hvdWxk
IG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0aGVyZSBhcmUgaW5jb21pbmcgY2FsbHMuIEJ1
dAorICAgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGR1cmluZyBoZWFwIGRlc3RydWN0aW9uLCB0aGVu
IHRoZXJlIG1heSBzdGlsbCBiZQorICAgIC8vIGluY29taW5nIGNhbGxzLCB3aGljaCBpcyBoYXJt
bGVzcy4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgb3VyIG91dGdvaW5nIGNhbGxzIHdpbGwgYmUg
cmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCisgICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxp
bmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2YgdGhlIH5DYWxsTGlua0luZm8KKyAg
ICAvLyBkZXN0cnVjdG9ycy4KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgZm9yIChzaXplX3Qgc2l6
ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBA
IC0xNTE5LDYgKzE1MjQsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0CiB7CiAgICAgYm9vbCBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9IGZhbHNlOwogICAgIAorICAg
IGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7CiAgICAg
dmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKICAgICBpZiAobV9yYXJlRGF0YSkg
ewpAQCAtMTc4OSw4ICsxNzk2LDMwIEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9u
KENhbGxGcmEKIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQordm9pZCBDYWxsTGlua0luZm86OnVu
bGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIpCit7CisgICAgQVNTRVJUKGlzTGlua2VkKCkpOworICAgIAorICAgIGlmIChpc0RGRykgewor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxs
IDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisjZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGw/IGdsb2Jh
bERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogZ2xvYmFsRGF0YS5qaXRTdHVi
cy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgaGFzU2VlblNob3VsZFJlcGF0Y2gg
PSBmYWxzZTsKKyAgICBjYWxsZWUuY2xlYXIoKTsKKworICAgIC8vIEl0IHdpbGwgYmUgb24gYSBs
aXN0IGlmIHRoZSBjYWxsZWUgaGFzIGEgY29kZSBibG9jay4KKyAgICBpZiAoaXNPbkxpc3QoKSkK
KyAgICAgICAgcmVtb3ZlKCk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7
CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dW5saW5r
Q2FsbHMoKTsKICAgICBpZiAoIShtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpIHx8IG1fbWV0aG9kQ2Fs
bExpbmtJbmZvcy5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2dsb2JhbERh
dGEtPmNhblVzZUpJVCgpKQpAQCAtMTc5OSwyNCArMTgyOCwxMDEgQEAgdm9pZCBDb2RlQmxvY2s6
OnVubGlua0NhbGxzKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FsbExpbmtJbmZv
cy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoIW1fY2FsbExpbmtJbmZvc1tpXS5pc0xpbmtl
ZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5m
b3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG9w
ZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7Ci0jZWxzZQotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChtX2NhbGxM
aW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2Fs
bCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7Ci0gICAgICAgIG1f
Y2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKKyAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVu
bGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKICAgICB9CiB9CisKK3ZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKK3sKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIodGhpcyk7CisgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1f
aW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVu
bGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKK30KICNlbmRpZgogCiB2b2lkIENv
ZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUoKQogeworICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisg
ICAgICAgIG1fYWx0ZXJuYXRpdmUtPmNsZWFyRXZhbENhY2hlKCk7CiAgICAgaWYgKCFtX3JhcmVE
YXRhKQogICAgICAgICByZXR1cm47CiAgICAgbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLmNs
ZWFyKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCByZXBsYWNlRXhp
c3RpbmdFbnRyaWVzKFZlY3RvcjxUPiYgdGFyZ2V0LCBWZWN0b3I8VD4mIHNvdXJjZSkKK3sKKyAg
ICBBU1NFUlQodGFyZ2V0LnNpemUoKSA8PSBzb3VyY2Uuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldC5zaXplKCk7ICsraSkKKyAgICAgICAgdGFyZ2V0W2ldID0gc291
cmNlW2ldOworfQorCit2b2lkIENvZGVCbG9jazo6Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKQor
eworICAgIGlmICghbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJl
cGxhY2VFeGlzdGluZ0VudHJpZXMobV9jb25zdGFudFJlZ2lzdGVycywgbV9hbHRlcm5hdGl2ZS0+
bV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0
aW9uRGVjbHMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25EZWNscyk7CisgICAgcmVwbGFjZUV4
aXN0aW5nRW50cmllcyhtX2Z1bmN0aW9uRXhwcnMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25F
eHBycyk7Cit9CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSLiBJZiBjb21waWxlT3B0aW1pemVk
KCkgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlCisvLyBlcGlsb2d1ZSwg
ZG8gT1NSIGZyb20gdGhlIG9sZCBjb2RlIGJsb2NrIHRvIHRoZSBuZXcgb25lLgorCisvLyBGSVhN
RTogQWZ0ZXIgZG9pbmcgc3VjY2Vzc2Z1bCBvcHRpbWl6ZWQgY29tcGlsYXRpb24sIHJlc2V0IHRo
ZSBwcm9maWxpbmcgY291bnRlciB0byAtMSwgc28KKy8vIHRoYXQgdGhlIG5leHQgZXhlY3V0aW9u
IG9mIHRoZSBvbGQgY29kZSBibG9jayB3aWxsIGp1bXAgc3RyYWlnaHQgaW50byBjb21waWxlT3B0
aW1pemVkKCkKKy8vIGFuZCBwZXJmb3JtIE9TUi4KKworLy8gRklYTUU6IEVuc3VyZSB0aGF0IGEg
Y2FsbCB0byBjb21waWxlT3B0aW1pemVkKCkganVzdCBkb2VzIE9TUiAoYW5kIHJlc2V0cyB0aGUg
Y291bnRlciB0byAtMSkKKy8vIGlmIHRoZSBjb2RlIGhhZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQu
CisKK0NvZGVCbG9jayogUHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkt
PmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayogRXZhbENvZGVCbG9jazo6cmVw
bGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayog
RnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0
ZWNvZGVGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxs
KTsKK30KKworSlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYg
KHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRK
SVRUeXBlKCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24n
dCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3Ig
PSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29t
cGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgcmV0dXJuIGVycm9yOwor
fQorCitKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFj
ZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUo
KSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0
aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRp
Y19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1p
emVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2Jq
ZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFjZW1lbnQo
KS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUoKSkpIHsK
KyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0aGlzIGFn
YWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXpl
ZEZvcihleGVjLCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0
cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTQ0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU2Vn
bWVudGVkVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC05OCwxMiArOTksMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RydWN0
IENhbGxMaW5rSW5mbyB7CisgICAgc3RydWN0IENhbGxMaW5rSW5mbzogcHVibGljIEJhc2ljUmF3
U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBDYWxsTGlua0luZm8oKQogICAg
ICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKICAgICAgICAgICAgICwgaXND
YWxsKGZhbHNlKQorICAgICAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgewogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB+Q2FsbExpbmtJbmZvKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlKCk7CisgICAgICAg
IH0KIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb247IC8vIGl0
J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBKSVQsIG9yIGEgbm9ybWFsIGNhbGwgaW4gREZHCiAg
ICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CkBAIC0xMTEsMTMg
KzExOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+IGNhbGxlZTsKICAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAg
ICAgICAgIGJvb2wgaXNDYWxsIDogMTsKKyAgICAgICAgYm9vbCBpc0RGRyA6IDE7CiAKICAgICAg
ICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQotICAgICAgICB2b2lkIHVubGlu
aygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7
Ci0gICAgICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHVu
bGluayhKU0dsb2JhbERhdGEmLCBSZXBhdGNoQnVmZmVyJik7CiAKICAgICAgICAgYm9vbCBzZWVu
T25jZSgpCiAgICAgICAgIHsKQEAgLTIxMCwxMyArMjE1LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUq
LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7
CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsK
ICAgICAgICAgSGVhcCogbV9oZWFwOwogCiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5D
b2RlQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7
IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2Uo
KTsgfQogCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CkBAIC0yNzksNiArMjg3
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCB1bmxpbmtD
YWxscygpOworICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNJbmNvbWluZ0NhbGxzKCkgeyByZXR1
cm4gbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpOyB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbExpbmtJbmZvKiBpbmNv
bWluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21p
bmcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHVubGlua0luY29taW5nQ2Fs
bHMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQpAQCAtMzAwLDggKzMxNywx
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
SklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvciA/IG93bmVyRXhl
Y3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkgOiBvd25lckV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQorICAgICAgICB2b2lkIHNldEpJVENv
ZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJp
dHlDaGVjaykKKyAgICAgICAgeworICAgICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKKyAgICAg
ICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOworICAg
ICAgICB9CisgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7
IH0KKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRD
b2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlUG9vbCogZXhlY3V0YWJsZVBvb2wo
KSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBvb2woKTsgfQorICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKikgPSAwOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7
CisjZWxzZQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBK
SVRDb2RlOjpCYXNlbGluZUpJVDsgfQogI2VuZGlmCiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0
KCk7IH0KQEAgLTM5OCw2ICs0MjUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8VmFsdWVQcm9maWxlLCBp
bnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3ZhbHVlUHJvZmlsZXMsIG1fdmFs
dWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQorICAgICAgICBW
YWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGludCBhcmd1bWVudEluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBhcmd1bWVudEluZGV4IC0gMTsKKyAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID49IG1fdmFsdWVQcm9m
aWxlcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBWYWx1
ZVByb2ZpbGUqIHJlc3VsdCA9IHZhbHVlUHJvZmlsZShhcmd1bWVudEluZGV4IC0gMSk7CisgICAg
ICAgICAgICBpZiAocmVzdWx0LT5ieXRlY29kZU9mZnNldCAhPSAtMSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICNlbmRp
ZgogCiAgICAgICAgIHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbmZvQ291bnQoKSBjb25zdApAQCAt
NTM1LDYgKzU3MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRXZhbENvZGVDYWNoZSYg
ZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKICAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgp
OworICAgICAgICAKKyAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2V4ZWN1dGVDb3VudGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRl
cjsKIAogICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2
YXRlLgogCkBAIC01OTQsNiArNjQ1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5mb3M7CiAgICAgICAgIFZlY3Rv
cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgVmVjdG9yPE1ldGhvZENh
bGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9zOworICAgICAgICBKSVRDb2RlIG1faml0
Q29kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrOworICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+ID4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC02MTAsNiArNjY0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAKKyAgICAgICAgT3du
UHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsgLy8gRklYTUUgbWFrZSB0aGlzIGRvIHNvbWV0
aGluZworCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6CkBAIC02NDYsOSArNzAyLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCiAKICAgICBjbGFz
cyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0KQot
ICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFs
T2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAmbV91bnNoYXJlZFN5bWJvbFRh
YmxlLCBmYWxzZSkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0
ZXJuYXRpdmUpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVU
eXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hh
cmVkU3ltYm9sVGFibGUsIGZhbHNlLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTY1OCwxNiArNzE0LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJv
Z3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJj
ZVByb3ZpZGVyLCAwKQorICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgUGFz
c093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBHbG9iYWxDb2Rl
QmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92
aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICAKKyNp
ZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2
aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogICAgIH07CiAKICAgICBj
bGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGlj
OgotICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgpCi0gICAgICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJj
ZVByb3ZpZGVyLCAwKQorICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgsIFBhc3NPd25Q
dHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIs
IDAsIGFsdGVybmF0aXZlKQogICAgICAgICAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGJhc2VTY29w
ZURlcHRoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTY4MSw2ICs3NDMsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0eSgpKTsKICAg
ICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKICAgICAgICAgfQorICAgICAg
ICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7CkBAIC02OTMsMTQgKzc2MSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYXMgd2UgbmVlZCB0byBpbml0aWFsaXNlIHRo
ZSBDb2RlQmxvY2sgYmVmb3JlIHdlIGNvdWxkIGluaXRpYWxpc2UgYW55IFJlZlB0ciB0byBob2xk
IHRoZSBzaGFyZWQKICAgICAgICAgLy8gc3ltYm9sIHRhYmxlLCBzbyB3ZSBqdXN0IHBhc3MgYXMg
YSByYXcgcG9pbnRlciB3aXRoIGEgcmVmIGNvdW50IG9mIDEuICBXZSB0aGVuIG1hbnVhbGx5IGRl
cmVmCiAgICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9yLgotICAgICAgICBGdW5jdGlvbkNvZGVC
bG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5
cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1
Y3RvcikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9s
VGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlz
Q29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAg
ICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwg
c291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgp
LmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvciwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAg
ICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2soKQogICAgICAgICB7CiAgICAgICAgICAg
ICBzaGFyZWRTeW1ib2xUYWJsZSgpLT5kZXJlZigpOwogICAgICAgICB9CisgICAgICAgIAorI2lm
IEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZp
cnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAgICAgfTsKIAogICAgIGlu
bGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDk0NDc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBjb3VudHMgKiBjZXJ0YWludHkgLyBudW1iZXJP
ZlNhbXBsZXM7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZklu
dDMycygpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwpAQCAtMTQy
LDYgKzE0Miw4OCBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB7CiAgICAgICAgIHJldHVy
biBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJheXMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkp
OwogICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAg
IHsKKyAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAgICAgInNhbXBsZXMgPSAldSwg
aW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJyYXkgPSAldSIsCisgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnQz
MnMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRvdWJsZXMoKSwKKyAgICAgICAgICAgICAg
ICBudW1iZXJPZkNlbGxzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcnJheXMoKSk7Cisg
ICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0g
fHwgISF3ZWFrQnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAg
ICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIjogIik7CisgICAgICAgICAgICAgICAgICAg
IGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIGZwcmludGYob3V0
LCAiJXMiLCBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuZGVzY3JpcHRpb24oKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXRzW2ld
KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICJEZWFkQ2VsbCIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgCisgICAgc3RydWN0IFN0YXRpc3Rp
Y3MgeworICAgICAgICB1bnNpZ25lZCBzYW1wbGVzOworICAgICAgICB1bnNpZ25lZCBpbnQzMnM7
CisgICAgICAgIHVuc2lnbmVkIGRvdWJsZXM7CisgICAgICAgIHVuc2lnbmVkIGNlbGxzOworICAg
ICAgICB1bnNpZ25lZCBhcnJheXM7CisgICAgfTsKKworICAgIC8vIE9wdGltaXplZCBtZXRob2Qg
Zm9yIGdldHRpbmcgYWxsIGNvdW50cyBhdCBvbmNlLgorICAgIHZvaWQgY29tcHV0ZVN0YXRpc3Rp
Y3MoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25z
dAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2FtcGxlcyA9IDA7CisgICAgICAgIHVuc2lnbmVk
IGludDMycyAgPSAwOworICAgICAgICB1bnNpZ25lZCBkb3VibGVzID0gMDsKKyAgICAgICAgdW5z
aWduZWQgY2VsbHMgICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGFycmF5cyAgPSAwOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytp
KSB7CisgICAgICAgICAgICBpZiAoIWJ1Y2tldHNbaV0pIHsKKyAgICAgICAgICAgICAgICBXZWFr
QnVja2V0IHdlYWtCdWNrZXQgPSB3ZWFrQnVja2V0c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAo
ISF3ZWFrQnVja2V0KSB7CisgICAgICAgICAgICAgICAgICAgIHNhbXBsZXMrKzsKKyAgICAgICAg
ICAgICAgICAgICAgY2VsbHMrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdlYWtCdWNrZXQu
Z2V0Q2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFycmF5cysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2FtcGxlcysrOworICAgICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pOworICAgICAgICAgICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkKKyAgICAgICAgICAgICAgICBpbnQzMnMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAgICAgICAgICAgZG91YmxlcysrOworICAgICAgICAg
ICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBjZWxscysrOwor
ICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJmdsb2JhbERhdGEsIHZhbHVlLmFzQ2VsbCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlzKys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcyA9IHNhbXBsZXM7CisgICAg
ICAgIHN0YXRpc3RpY3MuaW50MzJzICA9IGludDMyczsKKyAgICAgICAgc3RhdGlzdGljcy5kb3Vi
bGVzID0gZG91YmxlczsKKyAgICAgICAgc3RhdGlzdGljcy5jZWxscyAgID0gY2VsbHM7CisgICAg
ICAgIHN0YXRpc3RpY3MuYXJyYXlzICA9IGFycmF5czsKKyAgICB9CiAgICAgCiAgICAgaW50IGJ5
dGVjb2RlT2Zmc2V0OyAvLyAtMSBmb3IgcHJvbG9ndWUKICAgICBFbmNvZGVkSlNWYWx1ZSBidWNr
ZXRzW251bWJlck9mQnVja2V0c107CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTQ0
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnByZXNlcnZlTGFzdFZhcigKICAgICAgICAgbV9sYXN0VmFyID0gJm1fY2FsbGVl
UmVnaXN0ZXJzLmxhc3QoKTsKIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrKQor
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFt
Tm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSwgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRp
b25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVD
aGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRF
bWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hT
b3VyY2VJbmZvKCkpCkBAIC0yMjgsNiArMjI4LDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFBybwogICAgIAogICAgIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMg
PSAxOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCiAgICAgY29kZUJsb2NrLT5tX251bUNh
cHR1cmVkVmFycyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOworICAgIAorICAgIGlmIChjb21waWxh
dGlvbktpbmQgPT0gT3B0aW1pemluZ0NvbXBpbGF0aW9uKQorICAgICAgICByZXR1cm47CiAKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0
LmdldCgpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwpAQCAtMjU4LDcgKzI2MSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihQcm8KICAgICB9CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihG
dW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
Qm9keSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJs
ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxk
RW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAg
ICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3Vw
cG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3Bl
Q2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNSaWNoU291cmNlSW5mbygpKQpAQCAtNDE5LDcg
KzQyMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAgICB9
CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZh
bE5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUsIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29t
cGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLT5n
bG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Mo
c2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1Byb2ZpbGluZygpKQogICAgICwgbV9z
aG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0
c1JpY2hTb3VyY2VJbmZvKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDQ3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldER1bXBzR2VuZXJhdGVkQ29kZShib29s
IGR1bXBzR2VuZXJhdGVkQ29kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGR1bXBzR2VuZXJhdGVk
Q29kZSgpOwogCi0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgU2NvcGVD
aGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sqKTsKLSAgICAgICAgQnl0
ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9s
VGFibGUqLCBDb2RlQmxvY2sqKTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUq
LCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgRXZhbENvZGVCbG9jayopOworICAgICAg
ICBlbnVtIENvbXBpbGF0aW9uS2luZCB7IEZpcnN0Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21w
aWxhdGlvbiB9OworICAgICAgICAKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5v
ZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgUHJvZ3JhbUNvZGVCbG9jayosIENv
bXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5v
ZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRp
b25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBTY29wZUNoYWlu
Tm9kZSosIFN5bWJvbFRhYmxlKiwgRXZhbENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CiAK
ICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxEYXRhOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lczsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDk0NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjb21waWxlIHRoZSBk
YXRhZmxvdyBncmFwaCBmcm9tIGEgQ29kZUJsb2NrLgogY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewog
cHVibGljOgotICAgIEJ5dGVDb2RlUGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEdyYXBoJiBncmFwaCkKKyAgICBCeXRlQ29kZVBhcnNlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFs
RGF0YSkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9m
aWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKICAgICAg
ICAgLCBtX2N1cnJlbnRJbmRleCgwKQogICAgICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2UpCkBA
IC02NSw2ICs2Niw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAg
ICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdzKDApCiAgICAgeworI2lmIEVOQUJMRShEWU5BTUlD
X09QVElNSVpBVElPTikKKyAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CisjZW5kaWYK
ICAgICB9CiAKICAgICAvLyBQYXJzZSBhIGZ1bGwgQ29kZUJsb2NrIG9mIGJ5dGVjb2RlLgpAQCAt
NDIxLDggKzQyNSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KGFyZ0lkeCkpOwogICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFy
QXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8oUHJlZGljdE5vbmUpKTsKICAgICAgICAgSW5zdHJ1
Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsKTsKLSAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0
cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAgICAgaWYgKGlu
dGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2Nh
bGxfcHV0X3Jlc3VsdCkgewogICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgY2FsbCk7CisgICAgICAgICAgICBkeW5hbWljYWxseVByZWRpY3QoY2FsbCwgbV9jdXJy
ZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpKTsKKyAgICAgICAgfQogICAgICAgICBp
ZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgKHVuc2lnbmVkKWFyZ0NvdW50
ID4gbV9wYXJhbWV0ZXJTbG90cykKICAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKICAgICAgICAgcmV0dXJu
IGNhbGw7CkBAIC00NjIsOSArNDY4LDMyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gd2hpbGUgKCFtX3JldXNhYmxlTm9kZVN0YWNrLmlzRW1wdHkoKSk7CiAgICAgfQorICAg
IAorICAgIHZvaWQgZHluYW1pY2FsbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5kZXgsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgeworI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElP
TikKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gbV9wcm9maWxlZEJsb2NrLT52YWx1
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJU
KHByb2ZpbGUpOworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiRHluYW1p
YyBwcmVkaWN0aW9uIFsldSwgJXVdOiAiLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBwcm9maWxlLT5kdW1wKHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRp
ZgorICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJlZGljdChtYWtlUHJlZGljdGlvbigqbV9n
bG9iYWxEYXRhLCAqcHJvZmlsZSksIER5bmFtaWNQcmVkaWN0aW9uKTsKKyNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShub2RlSW5kZXgpOworICAgICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJ
bmRleCk7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgdm9pZCBkeW5hbWljYWxseVByZWRpY3Qo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGR5bmFtaWNhbGx5UHJlZGljdChu
b2RlSW5kZXgsIG1fY3VycmVudEluZGV4KTsKKyAgICB9CiAKICAgICBKU0dsb2JhbERhdGEqIG1f
Z2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayog
bV9wcm9maWxlZEJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogCiAgICAgLy8gVGhlIGN1cnJl
bnQgYmxvY2sgYmVpbmcgZ2VuZXJhdGVkLgpAQCAtNTYzLDcgKzU5Miw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVt
cCwgT3BJbmZvKG1fY3VycmVudEluZGV4KSk7CiAgICAgICAgICAgICByZXR1cm4gIW1fcGFyc2VG
YWlsZWQ7CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAgLy8gU3dpdGNoIG9uIHRoZSBj
dXJyZW50IGJ5dGVjb2RlIG9wY29kZS4KICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IGluc3RydWN0aW9uc0JlZ2luICsgbV9jdXJyZW50SW5kZXg7CiAgICAgICAgIHN3
aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNv
ZGUpKSB7CkBAIC04ODMsNiArOTEyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogCiAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlWYWwgPSBhZGRUb0dyYXBo
KEdldEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UsIHByb3BlcnR5
LCBhbGlhc2VzLmxvb2t1cEdldEJ5VmFsKGJhc2UsIHByb3BlcnR5KSk7CiAgICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOworICAgICAgICAg
ICAgZHluYW1pY2FsbHlQcmVkaWN0KGdldEJ5VmFsKTsKICAgICAgICAgICAgIGFsaWFzZXMucmVj
b3JkR2V0QnlWYWwoZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRf
YnlfdmFsKTsKQEAgLTkxMiw2ICs5NDIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRNZXRo
b2QgPSBhZGRUb0dyYXBoKEdldE1ldGhvZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJl
ZGljdE5vbmUpLCBiYXNlKTsKICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGdldE1ldGhvZCk7CisgICAgICAgICAgICBkeW5hbWljYWxseVByZWRpY3QoZ2V0TWV0
aG9kKTsKICAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0TWV0aG9kKGdldE1ldGhvZCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgo
b3BfbWV0aG9kX2NoZWNrKSArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsKQEAgLTkyNSw2
ICs5NTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeUlkID0gYWRkVG9HcmFwaChHZXRC
eUlkLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5SWQpOwor
ICAgICAgICAgICAgZHluYW1pY2FsbHlQcmVkaWN0KGdldEJ5SWQpOwogICAgICAgICAgICAgYWxp
YXNlcy5yZWNvcmRHZXRCeUlkKGdldEJ5SWQpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9nZXRfYnlfaWQpOwpAQCAtMTM1MCw3ICsxMzgyLDcgQEAgYm9vbCBwYXJzZShHcmFwaCYgZ3Jh
cGgsIEpTR2xvYmFsRGF0YSogZwogICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogICAgIHJl
dHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGdsb2JhbERhdGEs
IGNvZGVCbG9jaywgZ3JhcGgpLnBhcnNlKCk7CisgICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGds
b2JhbERhdGEsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBncmFwaCkucGFy
c2UoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdEcml2ZXIuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQnl0
ZUNvZGVQYXJzZXIuaCIKKyNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRG
R1Byb3BhZ2F0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51
bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90aGVyIH07CitpbmxpbmUg
Ym9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEV4
ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBq
aXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK3sK
KyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IEdyYXBoIGRmZyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZh
cnMpOworICAgIGlmICghcGFyc2UoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5j
dGlvbikKKyAgICAgICAgZGZnLnByZWRpY3RBcmd1bWVudFR5cGVzKGNhbGxlZUFyZ3NFeGVjLCBj
b2RlQmxvY2spOworICAgIAorICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9j
ayk7CisgICAgCisgICAgSklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBj
b2RlQmxvY2spOworICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKKyAg
ICAgICAgQVNTRVJUKGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIAorICAgICAgICBk
YXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oaml0Q29kZSwgKmppdENvZGVXaXRoQXJpdHlDaGVj
ayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGNvbXBpbGVNb2RlID09IENvbXBpbGVP
dGhlcik7CisgICAgICAgIEFTU0VSVCghaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAg
CisgICAgICAgIGRhdGFGbG93SklULmNvbXBpbGUoaml0Q29kZSk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSkKK3sKKyAgICByZXR1cm4gY29tcGlsZShDb21w
aWxlT3RoZXIsIGV4ZWMsIDAsIGNvZGVCbG9jaywgaml0Q29kZSwgMCk7Cit9CisKK2Jvb2wgdHJ5
Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhl
YywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIHJldHVybiBjb21waWxlKENv
bXBpbGVGdW5jdGlvbiwgZXhlYywgY2FsbGVlQXJnc0V4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwg
JmppdENvZGVXaXRoQXJpdHlDaGVjayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRHJpdmVyX2gKKyNk
ZWZpbmUgREZHRHJpdmVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklU
Q29kZTsKK2NsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKKworbmFtZXNwYWNlIERGRyB7CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKK2Jvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCBKSVRDb2RlJik7Citib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworI2Vsc2UKK2lubGluZSBib29sIHRy
eUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpIHsgcmV0dXJuIGZhbHNl
OyB9CitpbmxpbmUgYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJu
IGZhbHNlOyB9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0
NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMSw2ICsxMjEsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9k
ZUluZGV4LCBDbwogICAgIH0KICAgICBpZiAob3AgPT0gSlNDb25zdGFudCkgewogICAgICAgICBw
cmludGYoIiVzJCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5jb25zdGFudE51bWJl
cigpKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jaykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHByaW50
ZigiID0gJXMiLCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgfQogICAgICAgICBoYXNQ
cmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgIChub2RlLmlzQnJhbmNoKCkgfHwgbm9kZS5p
c0p1bXAoKSkgewpAQCAtMTg2LDE3ICsxOTAsNDcgQEAgdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4o
Tm9kZUluZGV4IG9wKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlw
ZXMoRXhlY1N0YXRlKiBleGVjKQordm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBzaXplX3QgbnVtYmVy
T2ZBcmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
LCBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGFyZyA9
IDE7IGFyZyA8IG51bWJlck9mQXJndW1lbnRzOyArK2FyZykgewotICAgICAgICBKU1ZhbHVlIGFy
Z3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKLSAgICAgICAgaWYgKGFyZ3Vt
ZW50VmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2Fy
Z10ubV92YWx1ZSB8PSBQcmVkaWN0SW50MzI7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50VmFs
dWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1f
dmFsdWUgfD0gUHJlZGljdERvdWJsZTsKKyAgICBpZiAoZXhlYykgeworICAgICAgICBzaXplX3Qg
bnVtYmVyT2ZBcmd1bWVudHMgPSBzdGQ6Om1pbihleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpLCBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoc2l6ZV90IGFyZyA9IDE7IGFyZyA8IG51bWJlck9mQXJndW1lbnRzOyArK2FyZykgewor
ICAgICAgICAgICAgSlNWYWx1ZSBhcmd1bWVudFZhbHVlID0gZXhlYy0+YXJndW1lbnQoYXJnIC0g
MSk7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRWYWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAg
ICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVkaWN0SW50MzI7
CisgICAgICAgICAgICBlbHNlIGlmIChhcmd1bWVudFZhbHVlLmlzRG91YmxlKCkpCisgICAgICAg
ICAgICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVkaWN0RG91
YmxlOworICAgICAgICB9CisgICAgfQorICAgIAorI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpB
VElPTikKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSk7CisKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPj0gMSk7
CisgICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyk7ICsrYXJnKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSog
cHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcp
OworICAgICAgICBpZiAoIXByb2ZpbGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCJBcmd1bWVudCBwcm9maWxl
IFslbHVdOiAiLCBhcmcpOworICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZG91dCk7CisgICAgICAg
IHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgbWVyZ2VQcmVkaWN0aW9u
KG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKGdsb2Jh
bERhdGEsICpwcm9maWxlKSk7CisgICAgICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAg
ICAgIHByaW50ZigiICAgIFByZWRpY3Rpb246ICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9h
cmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSkpOworI2VuZGlmCiAgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZgogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiA5NDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNp
bmNsdWRlIDxSZWdpc3RlckZpbGUuaD4KLSNpbmNsdWRlIDxkZmcvREZHTm9kZS5oPgorI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
ckZpbGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0xMzUsNDMgKzEzNiw0NSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9ibG9ja3NbYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlQmVnaW4pXTsKICAgICB9CiAKLSAgICB2b2lkIHByZWRpY3QoaW50IG9wZXJh
bmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisg
ICAgYm9vbCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFBy
ZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQg
KyBtX2FyZ3VtZW50UHJlZGljdGlvbnMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplOwotICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1fYXJndW1lbnRQcmVkaWN0
aW9uc1thcmd1bWVudF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNl
KSk7CisgICAgICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fYXJndW1lbnRQcmVkaWN0
aW9uc1thcmd1bWVudF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNl
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlUHJl
ZGljdGlvbnMuc2l6ZSgpKQotICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVQ
cmVkaWN0aW9uc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZVBy
ZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNv
dXJjZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisgICAgYm9vbCBw
cmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEhhc2hNYXA8dW5z
aWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFyUHJlZGlj
dGlvbnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxW
YXJQcmVkaWN0aW9ucy5lbmQoKSkgewogICAgICAgICAgICAgUHJlZGljdGlvblNsb3QgcHJlZGlj
dGlvblNsb3Q7Ci0gICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvblNsb3QubV92
YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgICAgICBi
b29sIHJlc3VsdCA9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtl
UHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAgICAgICAgICAgIG1fZ2xvYmFsVmFy
UHJlZGljdGlvbnMuYWRkKHZhck51bWJlciArIDEsIHByZWRpY3Rpb25TbG90KTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVyZ2VQcmVk
aWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25k
Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIHByZWRpY3QoTm9kZSYgbm9kZSwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
LCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3QoTm9kZSYgbm9kZSwg
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7
CiAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAgICBjYXNlIEdldExvY2FsOgotICAg
ICAgICAgICAgcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAg
ICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHByZWRpY3Rpb24sIHNvdXJjZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAg
ICAgICBwcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIHByZWRpY3Rpb24sIHNvdXJj
ZSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0R2xvYmFs
VmFyKG5vZGUudmFyTnVtYmVyKCksIHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRNZXRob2Q6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6
CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgICAg
ICBub2RlLnByZWRpY3QocHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBu
b2RlLnByZWRpY3QocHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yMTksMTIgKzIyMiw0MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gUHJl
ZGljdE5vbmU7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgLy8gSGVscGVyIG1ldGhvZHMg
dG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0YW50cy4KKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQ29u
c3RhbnQoKTsKKyAgICB9CisgICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzQ29uc3RhbnQoKTsKKyAg
ICB9CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0lu
dDMyQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50
KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNEb3VibGVDb25zdGFudChjb2RlQmxvY2spOworICAg
IH0KKyAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMu
CisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZh
bHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGludDMyX3QgdmFsdWVPZklu
dDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSW50MzJDb25zdGFudChj
b2RlQmxvY2spOworICAgIH0KKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KENvZGVC
bG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVCbG9jayk7CisgICAg
fQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5
cGUpOwogI2VuZGlmCiAKLSAgICB2b2lkIHByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSop
OworICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spOwogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2Nr
czsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5
NDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MTMsNiArOTEzLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhM
aW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2st
PmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9p
c0NhbGw7CisgICAgICAgIGluZm8uaXNERkcgPSB0cnVlOwogICAgICAgICBpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pz
Q2FsbHNbaV0ubV9zbG93Q2FsbCkpOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAg
aW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2Fs
bHNbaV0ubV9mYXN0Q2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCShyZXZpc2lvbiA5NDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDM5ICsyMDcsMTQgQEAg
cHVibGljOgogICAgIH0KIAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZv
ciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0g
ICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29uc3RhbnQoKTsKLSAg
ICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBncmFwaCgpW25vZGVJbmRleF0uaXNDb25zdGFudCgpOwotICAgIH0KLSAg
ICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5kZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGVJbmRleCkuaXNJbnQzMigpOwotICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9k
ZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzTnVtYmVyKCk7Ci0gICAg
fQorICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFw
aCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNKU0NvbnN0YW50KG5vZGVJbmRleCk7
IH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBncmFwaCgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAg
IGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFw
aCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KICAgICAvLyBI
ZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCi0gICAgSlNWYWx1
ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgdW5zaWduZWQgY29uc3Rh
bnRJbmRleCA9IGdyYXBoKClbbm9kZUluZGV4XS5jb25zdGFudE51bWJlcigpOwotICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXggKyBjb25zdGFudEluZGV4KS5nZXQoKTsKLSAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9m
SW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOwotICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZkRv
dWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQo
aXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGVJbmRleCkudW5jaGVja2VkR2V0TnVtYmVyKCk7Ci0gICAgfQorICAgIEpTVmFs
dWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgo
KS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAgIGludDMy
X3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3Jh
cGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAg
IGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1
cm4gZ3JhcGgoKS52YWx1ZU9mRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7
IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgSklUIGdlbmVyYXRlIGR5bmFtaWMsIGRlYnVnLW9u
bHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgogI2lmIERGR19KSVRfQVNTRVJUCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ0NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
OSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xOTUs
NiArMTk4LDcgQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5IAogc3Rh
dGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICA9IDB4MDQ7CiBzdGF0aWMgY29u
c3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RG91YmxlID0gMHgwODsKIHN0YXRpYyBjb25zdCBQcmVk
aWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIgPSAweDBjOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5
cGUgUHJlZGljdFRvcCAgICA9IDB4MGY7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBEeW5h
bWljUHJlZGljdGlvblRhZyA9IDB4ODA7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0aW9uVGFnTWFzayAgICA9IDB4ODA7CiAKQEAgLTIwMiw3ICsyMDYsNyBAQCBlbnVtIFByZWRp
Y3Rpb25Tb3VyY2UgeyBTdGF0aWNQcmVkaWN0aW9uCiAKIGlubGluZSBib29sIGlzQ2VsbFByZWRp
Y3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKHZhbHVlICYgUHJlZGlj
dENlbGwpID09IFByZWRpY3RDZWxsICYmICEodmFsdWUgJiB+UHJlZGljdEFycmF5KTsKKyAgICBy
ZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYmICEodmFsdWUgJiB+
KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7CiB9CiAKIGlubGluZSBib29sIGlz
QXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCkBAIC0yMjIsNyArMjI2LDcgQEAg
aW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3RlZAogCiBpbmxpbmUgYm9vbCBp
c051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gISEo
dmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZhbHVlICYgflByZWRpY3ROdW1iZXIpOworICAg
IHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1iZXIpICYmICEodmFsdWUgJiB+KFByZWRpY3RO
dW1iZXIgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwogfQogCiBpbmxpbmUgYm9vbCBpc0R5bmFtaWNQ
cmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCkBAIC0yMzEsNiArMjM1LDQyIEBAIGlubGlu
ZSBib29sIGlzRHluYW1pY1ByZWRpY3Rpb24oUHJlZGljdGUKICAgICByZXR1cm4gISEodmFsdWUg
JiBEeW5hbWljUHJlZGljdGlvblRhZyk7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCitpbmxpbmUgY29u
c3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAg
aWYgKGlzRHluYW1pY1ByZWRpY3Rpb24odmFsdWUpKSB7CisgICAgICAgIHN3aXRjaCAodmFsdWUg
JiB+UHJlZGljdGlvblRhZ01hc2spIHsKKyAgICAgICAgY2FzZSBQcmVkaWN0Tm9uZToKKyAgICAg
ICAgICAgIHJldHVybiAicC1keW4tYm90dG9tIjsKKyAgICAgICAgY2FzZSBQcmVkaWN0Q2VsbDoK
KyAgICAgICAgICAgIHJldHVybiAicC1keW4tY2VsbCI7CisgICAgICAgIGNhc2UgUHJlZGljdEFy
cmF5OgorICAgICAgICAgICAgcmV0dXJuICJwLWR5bi1hcnJheSI7CisgICAgICAgIGNhc2UgUHJl
ZGljdEludDMyOgorICAgICAgICAgICAgcmV0dXJuICJwLWR5bi1pbnQzMiI7CisgICAgICAgIGNh
c2UgUHJlZGljdE51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tbnVtYmVyIjsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tdG9wIjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSBQcmVkaWN0Tm9uZToKKyAg
ICAgICAgcmV0dXJuICJwLXN0YXQtYm90dG9tIjsKKyAgICBjYXNlIFByZWRpY3RDZWxsOgorICAg
ICAgICByZXR1cm4gInAtc3RhdC1jZWxsIjsKKyAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAg
ICAgcmV0dXJuICJwLXN0YXQtYXJyYXkiOworICAgIGNhc2UgUHJlZGljdEludDMyOgorICAgICAg
ICByZXR1cm4gInAtc3RhdC1pbnQzMiI7CisgICAgY2FzZSBQcmVkaWN0TnVtYmVyOgorICAgICAg
ICByZXR1cm4gInAtc3RhdC1udW1iZXIiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAi
cC1zdGF0LXRvcCI7CisgICAgfQorfQorI2VuZGlmCisKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1l
cmdlUHJlZGljdGlvbnMoUHJlZGljdGVkVHlwZSBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQog
ewogICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKGxlZnQpID09IGlzRHluYW1pY1ByZWRpY3Rp
b24ocmlnaHQpKQpAQCAtMjQ1LDkgKzI4NSwxMiBAQCBpbmxpbmUgUHJlZGljdGVkVHlwZSBtZXJn
ZVByZWRpY3Rpb25zKFByCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBt
ZXJnZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKK2lubGluZSBib29s
IG1lcmdlUHJlZGljdGlvbihUJiBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGxl
ZnQgPSBzdGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0PFByZWRpY3Rl
ZFR5cGU+KGxlZnQpLCByaWdodCkpOworICAgIFByZWRpY3RlZFR5cGUgbmV3UHJlZGljdGlvbiA9
IHN0YXRpY19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMoc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlw
ZT4obGVmdCksIHJpZ2h0KSk7CisgICAgYm9vbCByZXN1bHQgPSBuZXdQcmVkaWN0aW9uICE9IHN0
YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpOworICAgIGxlZnQgPSBuZXdQcmVkaWN0aW9u
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVk
aWN0aW9uKFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCkBAIC0y
NTksMjMgKzMwMiwzMSBAQCBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVk
CiAgICAgcmV0dXJuIHR5cGUgfCAoc291cmNlID09IER5bmFtaWNQcmVkaWN0aW9uID8gRHluYW1p
Y1ByZWRpY3Rpb25UYWcgOiAwKTsKIH0KIAotI2lmbmRlZiBOREVCVUcKLWlubGluZSBjb25zdCBj
aGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkKKyNpZiBFTkFCTEUo
VkFMVUVfUFJPRklMRVIpCitpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZhbHVlUHJvZmlsZSYgcHJvZmlsZSkKIHsKLSAg
ICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSBQcmVkaWN0Tm9uZToKLSAgICAgICAgcmV0dXJu
ICJwLWJvdHRvbSI7Ci0gICAgY2FzZSBQcmVkaWN0Q2VsbDoKLSAgICAgICAgcmV0dXJuICJwLWNl
bGwiOwotICAgIGNhc2UgUHJlZGljdEFycmF5OgotICAgICAgICByZXR1cm4gInAtYXJyYXkiOwot
ICAgIGNhc2UgUHJlZGljdEludDMyOgotICAgICAgICByZXR1cm4gInAtaW50MzIiOwotICAgIGNh
c2UgUHJlZGljdE51bWJlcjoKLSAgICAgICAgcmV0dXJuICJwLW51bWJlciI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuICJwLXRvcCI7Ci0gICAgfQorICAgIFZhbHVlUHJvZmlsZTo6U3Rh
dGlzdGljcyBzdGF0aXN0aWNzOworICAgIHByb2ZpbGUuY29tcHV0ZVN0YXRpc3RpY3MoZ2xvYmFs
RGF0YSwgc3RhdGlzdGljcyk7CisgICAgCisgICAgaWYgKCFzdGF0aXN0aWNzLnNhbXBsZXMpCisg
ICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5pbnQz
MnMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHluYW1pY1ByZWRpY3Rp
b25UYWcgfCBQcmVkaWN0SW50MzI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9
PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBEeW5hbWljUHJlZGljdGlvblRh
ZyB8IFByZWRpY3REb3VibGU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3Rh
dGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5
bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE51bWJlcjsKKyAgICAKKyAgICBpZiAoc3RhdGlz
dGljcy5hcnJheXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHluYW1p
Y1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0QXJyYXk7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3Mu
Y2VsbHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHluYW1pY1ByZWRp
Y3Rpb25UYWcgfCBQcmVkaWN0Q2VsbDsKKyAgICAKKyAgICByZXR1cm4gRHluYW1pY1ByZWRpY3Rp
b25UYWcgfCBQcmVkaWN0VG9wOwogfQogI2VuZGlmCiAKQEAgLTM1Niw2ICs0MDcsMzMgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoaXNDb25zdGFudCgpKTsKICAgICAgICAgcmV0dXJu
IG1fb3BJbmZvOwogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50TnVtYmVy
KCkpLmdldCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW50MzJDb25zdGFudChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0ludDMyKCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc051
bWJlcigpOworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFu
dChjb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aykuYXNJbnQzMigpOworICAgIH0KKworICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBBU1NFUlQoaXNEb3VibGVDb25z
dGFudChjb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVC
bG9jaykudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgfQogCiAgICAgYm9vbCBoYXNMb2NhbCgp
CiAgICAgewpAQCAtNDcwLDcgKzU0OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KG1fb3BJbmZvMik7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ug
c291cmNlKQorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRp
Y3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1ByZWRpY3Rpb24o
KSk7CiAgICAgICAgIApAQCAtNDc4LDE2ICs1NTYsMTkgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICAvLyB0byBoZWFwIGxvYWRzIGFzIHdlbGwgYXMgY2FsbHMgaXMgbm90IHByb2ZpdGFibGUsIGFz
IHRoZXNlIHByZWRpY3Rpb25zCiAgICAgICAgIC8vIGFyZSB3cm9uZyB0b28gb2Z0ZW4uIEhlbmNl
LCB0aGlzIGNvbXBsZXRlbHkgaWdub3JlcyBzdGF0aWMgcHJlZGljdGlvbnMuCiAgICAgICAgIGlm
IChzb3VyY2UgPT0gU3RhdGljUHJlZGljdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09
IFByZWRpY3ROb25lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlv
bik7CiAgICAgICAgIAotICAgICAgICBtX29wSW5mbzIgfD0gRHluYW1pY1ByZWRpY3Rpb25UYWcg
fCBwcmVkaWN0aW9uOworICAgICAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBEeW5h
bWljUHJlZGljdGlvblRhZyB8IHByZWRpY3Rpb247CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9v
cEluZm8yICE9IG5ld1ByZWRpY3Rpb247CisgICAgICAgIG1fb3BJbmZvMiB8PSBuZXdQcmVkaWN0
aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLQorICAgIAogICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3Vs
dCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRpb24u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dGlvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdQcm9wYWdhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpICYmIEVOQUJMRShE
WU5BTUlDX09QVElNSVpBVElPTikKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUHJvcGFnYXRvciB7CitwdWJsaWM6Cisg
ICAgUHJvcGFnYXRvcihHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaykKKyAgICAgICAgOiBt
X2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgICAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJv
ZmlsZWRCbG9jaykKKyAgICB7CisgICAgICAgIG1fcHJlZGljdGlvbnMucmVzaXplKG1fZ3JhcGgu
c2l6ZSgpKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaSA9IDA7IGkgPCBtX2dyYXBoLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgbV9wcmVkaWN0aW9uc1tpXSA9IFByZWRpY3ROb25lOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGZpeHBvaW50KCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJP
U0UKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xv
Z2ljYWxseS1zb3J0ZWQgYW5kCisgICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUuCisgICAg
ICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQo
KTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2Vz
IHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAorICAgICAgICAgICAg
Ly8gY2F1c2Ugc2xvd25lc3MuICBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1i
bGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28g
Y2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAg
ICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dh
cmQgZmxvdy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJv
cGFnYXRlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEbyBhbm90aGVyIGZv
cndhcmQgcGFzcyBiZWNhdXNlIGZvcndhcmQgcGFzc2VzIGFyZSBvbiBhdmVyYWdlIG1vcmUKKyAg
ICAgICAgICAgIC8vIHByb2ZpdGFibGUuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFu
Z2VkKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0UHJlZGljdGlvbihQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1tt
X2NvbXBpbGVJbmRleF0gPT0gcHJlZGljdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID0gcHJlZGljdGlvbjsK
KyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZVBy
ZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKERG
Rzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdLCBwcmVkaWN0
aW9uKSkKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgcHJvcGFnYXRlTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBO
b2RlVHlwZSBvcCA9IG5vZGUub3A7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2Fz
ZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9m
SlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdElu
dDMyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNE
b3VibGUoKSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFBy
ZWRpY3REb3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2
YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFz
Q2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJm1fZ2xvYmFsRGF0YSwgY2Vs
bCkpCisgICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJl
ZGljdEFycmF5LCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2Vs
bCwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgRHluYW1pY1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uID0gbV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICBp
ZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJn
ZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIG1fY2hh
bmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25zW25vZGUu
Y2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBEeW5hbWljUHJlZGljdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0
QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAg
Y2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJp
dFVSU2hpZnQ6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGNhc2UgVmFs
dWVUb0ludDMyOgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgRHluYW1pY1ByZWRpY3Rpb24pKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBWYWx1ZVRvTnVtYmVyOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24g
PSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgICAg
IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVt
YmVyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Cisg
ICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQx
KCldOworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9k
ZS5jaGlsZDIoKV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0R5bmFtaWNQcmVk
aWN0aW9uKGxlZnQpICYmIGlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJn
ZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJn
ZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlv
bikpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBt
ZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVy
Z2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIER5bmFtaWNQcmVkaWN0aW9u
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6Cisg
ICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9
IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBl
IHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkgJiYgaXNEeW5hbWljUHJlZGlj
dGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24obWVy
Z2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAgICAgICAgICAgICBtZXJnZVBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlvbikp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0
aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFr
ZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNz
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZVN0
cmljdEVxOgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgc2FkLCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVkaWN0aW9uLCBldmVuIHRob3Vn
aCB3ZSBlYXNpbHkKKyAgICAgICAgICAgIC8vIGNvdWxkLgorICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBEeW5hbWljUHJlZGljdGlvbikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdl
dEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgor
ICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7CisgICAgICAgICAg
ICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSkpCisgICAgICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29udmVydFRo
aXM6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdENl
bGwsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEdsb2JhbFZhclByZWRpY3Rpb24o
bm9kZS52YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgUHV0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gbV9ncmFwaC5wcmVk
aWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEo
KV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIER5bmFtaWNQcmVkaWN0aW9uKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAg
IC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcu
CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAg
ICAgICAgY2FzZSBERkc6Okp1bXA6CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNl
IFJldHVybjoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJl
Y3Q6CisgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgY2FzZSBQaGk6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGVzZSBnZXQgaWdu
b3JlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIGZvciB0aGVtLCB5ZXQuCisgICAg
ICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgY2Fz
ZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVG
b3J3YXJkKCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCJQ
cm9wYWdhdGluZyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAg
Zm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7
ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVCYWNrd2FyZCgp
CisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiUHJvcGFnYXRp
bmcgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKG1f
Y29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykKKyAg
ICAgICAgICAgIHByb3BhZ2F0ZU5vZGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0K
KyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0
YTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9wcm9maWxl
ZEJsb2NrOworICAgIAorICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICAKKyAgICBW
ZWN0b3I8UHJlZGljdGVkVHlwZSwgMTY+IG1fcHJlZGljdGlvbnM7CisKKyNpZiBERkdfREVCVUdf
VkVSQk9TRQorICAgIHVuc2lnbmVkIG1fY291bnQ7CisjZW5kaWYKKyAgICAKKyAgICBib29sIG1f
Y2hhbmdlZDsKK307CisKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJs
b2NrKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCk7CisgICAgQVNTRVJUKHByb2ZpbGVkQmxvY2spOworICAgIAorICAgIFByb3BhZ2F0b3Ig
cHJvcGFnYXRvcihncmFwaCwgKmdsb2JhbERhdGEsIGNvZGVCbG9jaywgcHJvZmlsZWRCbG9jayk7
CisgICAgcHJvcGFnYXRvci5maXhwb2ludCgpOworICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NF
CisgICAgZ3JhcGguZHVtcChjb2RlQmxvY2spOworI2VuZGlmCit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBFTkFCTEUoRFlOQU1J
Q19PUFRJTUlaQVRJT04pCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BhZ2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wYWdhdGlv
bl9oCisjZGVmaW5lIERGR1Byb3BhZ2F0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2Rl
QmxvY2s7CitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVzcGFjZSBERkcgeworCisvLyBQcm9w
YWdhdGUgZHluYW1pYyBwcmVkaWN0aW9ucyBmcm9tIHZhbHVlIHNvdXJjZXMgdG8gdmFyaWFibGVz
LgorI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKK3ZvaWQgcHJvcGFnYXRlKEdyYXBo
JiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKik7CisjZWxzZQoraW5saW5lIHZvaWQgcHJvcGFn
YXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKikgeyB9CisjZW5kaWYKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5NDQ3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
Myw2ICs1OTMsOSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGluCiAg
ICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlu
a0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxM
aW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQ
YXRoT3RoZXIsIGNvZGVQdHIpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9j
aykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbCgmY2FsbExp
bmtJbmZvKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDk0NDc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTgsNiArMjE4LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFu
ZGxlSGVhcAogICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXApCiAgICAgLCBtX3dlYWtPd25l
cigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAs
IG1fbmV4dCgwKQogewogfQogCkBAIC0yMjUsNiArMjI3LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6
Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aQogICAgIDogbV9oYW5kbGVIZWFwKDApCiAgICAgLCBtX3dl
YWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkK
KyAgICAsIG1fbmV4dCgwKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiA5NDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTYgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlQgogewogfQogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikK
K3ZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kIGtp
bmQpCit7CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0
ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IDEgOiAzMCksIEFic29sdXRl
QWRkcmVzcygmbV9jb2RlQmxvY2stPm1fZXhlY3V0ZUNvdW50ZXIpKTsKKyAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IGN0aV9vcHRp
bWl6ZV9mcm9tX2xvb3AgOiBjdGlfb3B0aW1pemVfZnJvbV9yZXQpOworICAgIHN0dWJDYWxsLmNh
bGwoKTsKKyAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKK30KKyNlbmRpZgorCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKIHsKQEAgLTEwMiw2
ICsxMTIsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc3R1YkNhbGwuY2Fs
bCh0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CiAgICAgc3R1YkNhbGwuZ2V0QXJndW1lbnQoMCwgcmVn
VDEsIHJlZ1QwKTsgLy8gcmVsb2FkIGxhc3QgcmVzdWx0IHJlZ2lzdGVycy4KICAgICBza2lwVGlt
ZW91dC5saW5rKHRoaXMpOworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0
aW1pemF0aW9uQ2hlY2spOwogfQogI2Vsc2UKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkK
QEAgLTExMSw2ICsxMjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc2tp
cFRpbWVvdXQubGluayh0aGlzKTsKIAogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAg
ICAKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKIH0K
ICNlbmRpZgogCkBAIC02MjMsNyArNjM3LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVQdHIqIGZ1bgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50
cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLQorICAg
IAogICAgIHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2Rl
OjpCYXNlbGluZUpJVCk7CiB9CiAKQEAgLTYzNyw2ICs2NTEsOSBAQCB2b2lkIEpJVDo6bGlua0Zv
cihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5p
c0xpbmtlZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCpnbG9iYWxEYXRh
LCBjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJ
bmZvLT5ob3RQYXRoT3RoZXIsIGNvZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNv
ZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChj
YWxsTGlua0luZm8pOwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5v
dCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gOTQ0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NzIsNiArOTcyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyBMb2FkcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcg
aW50byBkc3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAgICAKKyAg
ICAgICAgZW51bSBPcHRpbWl6YXRpb25DaGVja0tpbmQgeyBMb29wT3B0aW1pemF0aW9uQ2hlY2ss
IFJldE9wdGltaXphdGlvbkNoZWNrIH07CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikK
KyAgICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5k
KTsKKyNlbHNlCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlv
bkNoZWNrS2luZCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIHZvaWQgZW1pdFRpbWVv
dXRDaGVjaygpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3Bl
cmFuZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gOTQ0NzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw2ICsxMDYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZhcmFyZ3NTbG93Q2Fz
ZShJCiAKIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7
CisgICAgCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKIAogICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTExOCw2ICsxMjAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjpl
bWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7Cisg
ICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKICAgICB1bnNpZ25lZCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDk0NDc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDIzICsyNyw1MCBAQAogI2RlZmluZSBKSVRDb2RlX2gKIAogI2lmIEVOQUJMRShKSVQp
Ci0KICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXIuaCIKKyNlbmRp
ZgogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgY2xhc3MgSlNHbG9i
YWxEYXRhOwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKKyNlbmRpZgogICAgIAogICAgIGNsYXNz
IEpJVENvZGUgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IENvZGVQdHI7CisjZWxzZQorICAgICAgICBKSVRDb2RlKCkgeyB9CisjZW5kaWYKICAgICBwdWJs
aWM6CiAgICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJhc2VsaW5lSklULCBE
RkdKSVQgfTsKLQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJ
VCgpCisgICAgICAgIHsKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICAg
ICAgcmV0dXJuIEJhc2VsaW5lSklUOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7
CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgdG9w
VGllckpJVCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIG5leHRUaWVySklUKEpJVFR5cGUg
aml0VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqaXRUeXBlLCBq
aXRUeXBlID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0gREZHSklUKTsKKyAgICAgICAgICAg
IHJldHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKICAg
ICAgICAgSklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNTMsNyArODAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAg
IHsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yICEoKSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVjdXRhYmxl
QWRkcmVzcygpOwpAQCAtMTI0LDEwICsxNTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBDb2RlUmVmIG1fcmVmOwogICAgICAgICBKSVRUeXBlIG1faml0VHlwZTsKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQogICAgIH07CiAKIH07CiAKICNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQ0NzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTIsNiArNDUyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKElu
cwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOwor
ICAgIAogICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7CiAgICAgQVNTRVJU
KHJlZ1QxICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJl
Z2lzdGVyICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQ3Miw2ICs0NzQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3Jl
dF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAg
QVNTRVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAgICBBU1NFUlQocmVnVDEgIT0g
cmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgIT0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHJldmlzaW9uIDk0NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiArMTgxNiwzMiBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBvcF9jaGVja19oYXNfCiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FU
X0VORCgpOwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX2xv
b3ApCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVj
dCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNo
YWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzog
b3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKK30KKworREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9yZXQpCit7CisgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2Fs
bEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2st
PmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3Ip
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9u
IGZyb20gcmV0IGZhaWxlZC5cbiIpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfaW5zdGFuY2VvZikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lv
biA5NDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIzLDYgKzQyMyw4IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NU
VUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAg
ICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3Io
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9m
cm9tX2xvb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9v
cHRpbWl6ZV9mcm9tX3JldChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9T
VFVCIGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2
b2lkKiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9qaXRDb21waWxlKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTQ0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjYgKzI4LDE2
IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IlBhcnNlci5oIgogI2luY2x1ZGUgIlVTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAiVmVjdG9y
LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5o
IgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBFeGVjdXRhYmxlQmFzZTo6c19pbmZvID0geyAiRXhlY3V0YWJs
ZSIsIDAsIDAsIDAgfTsKIAotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCi1z
dGF0aWMgYm9vbCB0cnlERkdDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVENvZGUmIGppdENvZGUpCi17Ci0jaWYgRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJ
T05TKQotICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9uJ3Qg
Ym90aGVyIHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFyZ2V0
cy4KLSAgICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0KLSAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIERG
Rzo6R3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVt
VmFycyk7Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIERGRzo6SklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZ2xv
YmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFGbG93SklULmNvbXBpbGUoaml0Q29k
ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGVGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGpp
dENvZGVXaXRoQXJpdHlDaGVjaykKLXsKLSNpZiBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMp
Ci0gICAgLy8gRklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQgc3VwcG9ydGVkLCBkb24ndCBib3Ro
ZXIgc2Nhbm5pbmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBhbnkganVtcCB0YXJnZXRzLgot
ICAgIGlmIChjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9OUykKLQotICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgREZHOjpH
cmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJz
KTsKLSAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNhbGxlZUFyZ3NFeGVjKQotICAgICAgICBkZmcucHJl
ZGljdEFyZ3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMpOwotCi0gICAgREZHOjpKSVRDb21waWxl
ciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7Ci0gICAgZGF0YUZsb3dK
SVQuY29tcGlsZUZ1bmN0aW9uKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHRy
eURGR0NvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpIHsgcmV0dXJuIGZh
bHNlOyB9Ci1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhl
Y1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLSAgICAKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiB7CiAjaWYg
RU5BQkxFKEpJVCkKQEAgLTE2Niw4ICsxMTYsMTggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5j
dGlvbkV4ZWN1dGFibGUoRQogewogfQogCitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKKyAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIEpTT2JqZWN0KiBlcnJvciA9
IDA7CisgICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRv
cFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVD
aGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlw
ZSgpKSk7CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7
Cit9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0
ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEV2YWxF
eGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBKU09i
amVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTgzLDI2ICsxNDMsNDEgQEAgSlNPYmplY3QqIEV2YWxFeGVj
dXRhYmxlOjpjb21waWxlSW50ZXJuYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1f
ZXZhbENvZGVCbG9jayk7Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxD
b2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNo
YWluTm9kZS0+bG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBn
ZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBz
Y29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2Rl
QmxvY2suZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sg
PSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRD
b2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9ldmFs
Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpLCBwcmV2
aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+
IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCks
IHNjb3BlQ2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENv
ZGVCbG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29k
ZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZp
cnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVy
YXRlKCkpKSB7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay5jbGVhcigpOworICAgICAgICBtX2V2
YWxDb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENv
ZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBldmFsTm9kZS0+ZGVzdHJv
eURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBldmFsTm9k
ZS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2V2YWxDb2RlQmxvY2stPmNvcHlEYXRhRnJvbUFsdGVy
bmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCku
Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGUo
ZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAg
aWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAg
ICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21w
aWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0
Q29kZUZvckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpCisgICAgICAgICAgICBBU1NF
UlQoIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSB8fCAhbV9ldmFsQ29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLT5oYXNJbmNvbWluZ0NhbGxzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0aXZlIHBpZWNlIG9mIGNvZGUgY29t
cGlsZWQgd2l0aCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCwgc28gd2UgY2Fu
IHNpbGVudGx5IGZhaWwuCisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VBbHRl
cm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmRvbnRPcHRpbWl6
ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5O
b2RlLT5nbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICB9CiAjaWYg
IUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6
OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kaXNj
YXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBtX2V2YWxDb2RlQmxvY2stPnNldEpJVENv
ZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIH0KICNl
bmRpZgogCkBAIC0yNjEsMTAgKzIzNiwxOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNoZWNrU3ludGF4CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNPYmplY3QqIFByb2dy
YW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUpCiB7Ci0gICAgQVNTRVJUKCFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIEFTU0VSVChleGVj
LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9wcm9n
cmFtQ29kZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX3Byb2dy
YW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAg
ICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2Rl
OjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOworICAgIEFT
U0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOworfQogCitKU09i
amVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
KQorewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0yNzcsMjUg
KzI2MSw0MCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9i
amVjdC5nZXQoKTsKICAgICAKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcg
UHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgp
LnByb3ZpZGVyKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihh
ZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hh
aW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2su
Z2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3By
b2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2Rl
Ojpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9wcm9ncmFt
Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29k
ZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBwcmV2aW91c0NvZGVCbG9jay5y
ZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5O
b2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0
KCksICEhbV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0
b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBp
bGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkg
ewotICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9wcm9ncmFt
Q29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dy
YW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgcHJvZ3JhbU5vZGUt
PmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCiAgICAg
cHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5
RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+
Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0
cnlERkdDb21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9y
Q2FsbCk7Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGls
ZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAg
ICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgbV9wcm9ncmFtQ29k
ZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVk
KSB7CisgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQor
ICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5r
SW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcHJv
Z3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fcHJvZ3Jh
bUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9n
cmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9w
cm9ncmFtQ29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2Fs
bCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29k
ZUJsb2NrLmdldCgpKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQog
ICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAg
ICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYK
KyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGws
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMzQyLDcgKzM0
MSwyOSBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogICAgIEJhc2U6OmNs
ZWFyQ29kZSgpOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9y
Q2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5O
b2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpCit7CisgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NF
UlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAg
aWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJK
SVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3Bl
Q2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxv
Y2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNh
bGwpOworICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgp
LmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAg
ZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBl
KCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJu
IGVycm9yOworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2Fs
bEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
LCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7
CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CkBAIC0zNTgsMTEgKzM3OSwxMiBAQCBK
U09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsK
IAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNh
bGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBn
bG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCks
IGZhbHNlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkp
KTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2Nr
Rm9yQ2FsbC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRv
bVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNh
bGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBn
bG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCks
IGZhbHNlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNv
ZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9k
eS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUo
KSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAhIW1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJu
YXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRl
Y29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9
IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNs
ZWFyKCk7CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8
RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZl
KCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0
aW9uOwogICAgIH0KQEAgLTM3MywxNyArMzk1LDMxIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxs
LT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBt
X2NvZGVCbG9ja0ZvckNhbGwtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAg
ICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGVGdW5jdGlvbihleGVjLCBjYWxsZWVB
cmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBtX2pp
dENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQor
ICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09
IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21w
aWxlRnVuY3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQo
KSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAg
ICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JD
YWxsLT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+
YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkgeworICAg
ICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkp
OworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZG9udE9wdGltaXplQW55dGlt
ZVNvb24oKTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JD
YWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShz
Y29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLQorICAgICAgICB9CiAjaWYgIUVOQUJMRShP
UENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2Vu
ZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5kaXNjYXJkQnl0
ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5z
ZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
ayk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY2FsbGVlQXJnc0V4ZWMpOwpAQCAt
NDAzLDggKzQzOSwxMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9y
CiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogeworICAgIFVOVVNFRF9QQVJBTShq
aXRUeXBlKTsKKyAgICAKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKICAgICBSZWZQ
dHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVu
Y3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJj
ZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBK
U1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKQEAgLTQxOSwxMSArNDU3LDEyIEBAIEpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAg
QVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2Rl
LCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0
KCksIHRydWUpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUg
PT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAg
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2Nr
KHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
b3VyY2UoKS5zdGFydE9mZnNldCgpLCB0cnVlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkp
KTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcg
Qnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQo
KSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RD
b21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUo
KSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKyAgICAgICAg
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29k
ZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwog
ICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwog
ICAgIH0KQEAgLTQzNCwxNCArNDczLDMwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOworICAgIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0g
ICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9k
ZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCksICZtX2ppdENvZGVG
b3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBm
YWxzZTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSBjb25z
dHJ1Y3RvcnMgd2l0aCBERkcuCisgICAgICAgIGlmIChkZmdDb21waWxlZCkgeworICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNv
bWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+
KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAg
ICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29u
KCk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21w
aWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5n
ZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgfQog
I2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJh
dG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ29uc3RydWN0LCBt
X2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDk0NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDYsMTAgKzMwNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAg
ICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2V2YWxD
b2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywg
c2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFs
KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAg
ICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7CiAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKICAgICAgICAgRXZh
bENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zNDQsNyArMzQ2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpT
dHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJ
bnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgICAg
ICB2b2lkIHVubGlua0NhbGxzKCk7CiAKQEAgLTM2OSwxMSArMzcxLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFs
T2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBp
ZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJ
bnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBj
b21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9ncmFtQ29kZUJsb2Nr
KTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisKICAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTQwMyw3ICs0MDcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVj
dHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBT
b3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFs
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQg
dW5saW5rQ2FsbHMoKTsKIApAQCAtNDUwLDExICs0NTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3Qp
OwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9j
b2RlQmxvY2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJ
bnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMpOworICAgICAgICAg
ICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9k
ZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICAgICAgICAgIHJl
dHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1p
emVkRm9yQ2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVl
QXJnc0V4ZWMgPSAwKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CkBAIC00
NzEsMTEgKzQ3NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVj
LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVj
dCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkK
LSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVj
LCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29u
c3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKKyAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgU2NvcGVD
aGFpbk5vZGUqKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
OwpAQCAtNTAxLDYgKzUwOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBjb21waWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgfQog
ICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcGlsZU9wdGltaXplZEZv
ciBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhIGNhbGxmcmFtZSBzZXQgdXAgdG8gY2FsbCB0
aGlzIGZ1bmN0aW9uLAorICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBtYWtlIHNwZWN1bGF0
aXZlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIEFT
U0VSVChleGVjLT5jYWxsZWUoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCkt
PmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAgICAgICAgICAgIEFTU0VSVChhc0Z1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29wZUNoYWluTm9kZSwg
ZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAg
ICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3Bl
Q2hhaW5Ob2RlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRl
ZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtNTQ5LDggKzU3MSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSWRl
bnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRz
LCBGdW5jdGlvblBhcmFtZXRlcnMqLCBib29sKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAKLSAg
ICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVD
aGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKTsKLSAgICAgICAgSlNPYmplY3Qq
IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSop
OworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5
cGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIAogICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNp
dENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVu
c2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjAsMTEgKzk2MCwyMyBAQAog
I2RlZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9U
SUVSRURfQ09NUElMQVRJT04pICYmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBFTkFCTEVfVElF
UkVEX0NPTVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRl
ZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCiAjaWYgIWRl
ZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxV
RTY0KSAmJiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9WQUxVRV9QUk9GSUxFUiAwCiAj
ZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTikKKyNpZiBF
TkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKSAmJiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisjZGVm
aW5lIEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiAxCisjZWxzZQorI2RlZmluZSBFTkFCTEVf
RFlOQU1JQ19PUFRJTUlaQVRJT04gMAorI2VuZGlmCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVO
QUJMRV9WRVJCT1NFX1ZBTFVFX1BST0ZJTEUpICYmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICNk
ZWZpbmUgRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSAwCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaAkocmV2aXNpb24g
OTQ0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNCArNDEsNjMgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGVu
dW0gU2VudGluZWxUYWcgeyBTZW50aW5lbCB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4g
Y2xhc3MgU2VudGluZWxMaW5rZWRMaXN0IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBC
YXNpY1Jhd1NlbnRpbmVsTm9kZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBOb2RlKiBpdGVyYXRv
cjsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZShTZW50aW5lbFRhZykKKyAgICAgICAgOiBtX25l
eHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJhc2lj
UmF3U2VudGluZWxOb2RlKCkKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UHJldihCYXNpY1Jhd1NlbnRpbmVs
Tm9kZSogcHJldikgeyBtX3ByZXYgPSBwcmV2OyB9CisgICAgdm9pZCBzZXROZXh0KEJhc2ljUmF3
U2VudGluZWxOb2RlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KKyAgICAKKyAgICBUKiBwcmV2
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJldik7IH0KKyAgICBUKiBuZXh0KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fbmV4dCk7IH0KKyAgICAKKyAgICBib29sIGlzT25MaXN0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghIW1fcHJldiA9PSAhIW1fbmV4dCk7Cisg
ICAgICAgIHJldHVybiAhIW1fcHJldjsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmUoKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUqIG1fbmV4dDsKKyAgICBC
YXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9wcmV2OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFJhd05vZGUgPSBUPiBjbGFzcyBTZW50aW5lbExpbmtlZExpc3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAKICAgICBTZW50aW5lbExpbmtlZExpc3QoKTsK
IAotICAgIHZvaWQgcHVzaChOb2RlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlKE5vZGUqKTsK
KyAgICB2b2lkIHB1c2goVCopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZShUKik7CiAKICAgICBp
dGVyYXRvciBiZWdpbigpOwogICAgIGl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRlOgotICAgIE5v
ZGUgbV9oZWFkU2VudGluZWw7Ci0gICAgTm9kZSBtX3RhaWxTZW50aW5lbDsKKyAgICBSYXdOb2Rl
IG1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUgbV90YWlsU2VudGluZWw7CiB9OwogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6U2Vu
dGluZWxMaW5rZWRMaXN0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIEJhc2ljUmF3U2Vu
dGluZWxOb2RlPFQ+OjpyZW1vdmUoKQoreworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxULCBCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTxUPiA+OjpyZW1vdmUoc3RhdGljX2Nhc3Q8VCo+KHRoaXMpKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSBTZW50aW5l
bExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OlNlbnRpbmVsTGlua2VkTGlzdCgpCiAgICAgOiBtX2hl
YWRTZW50aW5lbChTZW50aW5lbCkKICAgICAsIG1fdGFpbFNlbnRpbmVsKFNlbnRpbmVsKQogewpA
QCAtNjksMjEgKzEwOCwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRp
bmVsCiAgICAgbV90YWlsU2VudGluZWwuc2V0TmV4dCgwKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIE5vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46Oml0ZXJh
dG9yIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6YmVnaW4oKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8
VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6YmVn
aW4oKQogewotICAgIHJldHVybiBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQqPihtX2hlYWRTZW50aW5lbC5uZXh0KCkpOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgTm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6aXRl
cmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjplbmQoKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8
VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6ZW5k
KCkKIHsKLSAgICByZXR1cm4gJm1fdGFpbFNlbnRpbmVsOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUKj4oJm1fdGFpbFNlbnRpbmVsKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlu
bGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cHVzaChOb2RlKiBub2RlKQordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBSYXdOb2RlPjo6cHVzaChUKiBub2RlKQogewogICAgIEFTU0VSVChub2Rl
KTsKLSAgICBOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOwotICAgIE5vZGUqIG5leHQgPSBt
X2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgQVNTRVJUKCFub2RlLT5wcmV2KCkpOworICAgIEFT
U0VSVCghbm9kZS0+bmV4dCgpKTsKKyAgICAKKyAgICBSYXdOb2RlKiBwcmV2ID0gJm1faGVhZFNl
bnRpbmVsOworICAgIFJhd05vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CiAKICAg
ICBub2RlLT5zZXRQcmV2KHByZXYpOwogICAgIG5vZGUtPnNldE5leHQobmV4dCk7CkBAIC05Miwx
NyArMTM0LDI1IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgdm9pZCBTZW4KICAg
ICBuZXh0LT5zZXRQcmV2KG5vZGUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5s
aW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUoTm9kZSogbm9kZSkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUgdm9pZCBTZW50aW5l
bExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OnJlbW92ZShUKiBub2RlKQogewotICAgIE5vZGUqIHBy
ZXYgPSBub2RlLT5wcmV2KCk7Ci0gICAgTm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKKyAgICBB
U1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCEhbm9kZS0+cHJldigpKTsKKyAgICBBU1NFUlQoISFu
b2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7Cisg
ICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKIAogICAgIHByZXYtPnNldE5leHQobmV4
dCk7CiAgICAgbmV4dC0+c2V0UHJldihwcmV2KTsKKyAgICAKKyAgICBub2RlLT5zZXRQcmV2KDAp
OworICAgIG5vZGUtPnNldE5leHQoMCk7CiB9CiAKIH0KIAordXNpbmcgV1RGOjpCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTsKIHVzaW5nIFdURjo6U2VudGluZWxMaW5rZWRMaXN0OwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106255</attachid>
            <date>2011-09-03 01:19:52 -0700</date>
            <delta_ts>2011-09-03 01:21:30 -0700</delta_ts>
            <desc>the patch - fix conflicts, style</desc>
            <filename>dynopt_patch_5.diff</filename>
            <type>text/plain</type>
            <size>120432</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3Rlc3RzL3Y4LXY2L3Y4LWNyeXB0by5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL1N1blNwaWRlci90ZXN0cy92OC12Ni92
OC1jcnlwdG8uanMJKHJldmlzaW9uIDk0NDg0KQorKysgUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlk
ZXIvdGVzdHMvdjgtdjYvdjgtY3J5cHRvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNiArMzQy
LDggQEAgZnVuY3Rpb24gYm5wTFNoaWZ0VG8obixyKSB7CiAgIGZvcihpID0gZHMtMTsgaSA+PSAw
OyAtLWkpIHJfYXJyYXlbaV0gPSAwOwogICByX2FycmF5W2RzXSA9IGM7CiAgIHIudCA9IHRoaXMu
dCtkcysxOworLy8gICAgcHJpbnQoImRzID0gIitkcyk7CisvLyAgICBwcmludCgici50ID0gIity
LnQpOwogICByLnMgPSB0aGlzLnM7CiAgIHIuY2xhbXAoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc3IEBACisyMDExLTA5LTAzICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSmF2YVNjcmlwdENvcmUgZG9l
cyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgdG8gaGF2
ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICBhIHBhcnRpY3Vs
YXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0b3JlZCBpbgorICAgICAgICBk
ZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2RlQmxvY2tzIGFyZSBvcHRpbWl6
ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNvdW50ZXIpIHRoYXQgaXMgaW5j
cmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3VlcyBiZWNvbWVzIHBvc2l0aXZl
LiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bworICAgICAgICB0aGUgb2xkIENv
ZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAgICBUaGUgREZHIGNhbiBub3cg
cHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMsIGFuZAorICAgICAgICBwcm9w
YWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0IHRoZSBuZXcgcGhhc2Ugd2hp
bGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIGEgREZHRHJp
dmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBzdWxhdGVzIGhvdyB0byBydW4g
dGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgdHVybmVkIG9mZiBi
eSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9ybWFuY2UKKyAgICAgICAgd2lu
IG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0byBhbmQgcmljaGFyZHMgYnkK
KyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBzdGlsbCBkb2VzIG5vdCBkbyBh
cyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAgTm90YWJseSwgdGhlIERGRyBi
YWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlzIGxhcmdlbHkgb2JsaXZpb3Vz
IHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFpbGFibGUKKyAgICAgICAgdG8g
aXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYgKHRoZSBkZWZhdWx0KSwgdGhp
cyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hBZGQzMik6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
bGVhckV2YWxDYWNoZSk6CisgICAgICAgIChKU0M6OnJlcGxhY2VFeGlzdGluZ0VudHJpZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKToKKyAgICAg
ICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpF
dmFsQ29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJs
b2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmNvbXBp
bGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1p
emVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpHbG9iYWxD
b2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OlByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFs
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OkZ1bmN0aW9uQ29k
ZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKEpT
Qzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21w
dXRlU3RhdGlzdGljcyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpkeW5hbWlj
YWxseVByZWRpY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGVGdW5jdGlv
bik6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
Ojp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRp
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0R2xvYmFsVmFyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmlzSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzSW50MzJDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzRG91YmxlQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzSlNDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzSW50MzJDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzRG91YmxlQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OmlzTnVtYmVyUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
cHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjptZXJnZVByZWRpY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNJ
bnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0RvdWJsZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpwcmVkaWN0KToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRpb24uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpQcm9wYWdhdG9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6c2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFn
YXRvcjo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpw
cm9wYWdhdGVOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVG
b3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVCYWNrd2Fy
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHUHJv
cGFnYXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAgICAg
ICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnTGlua0Zvcik6
CisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmg6CisgICAgICAgIChKU0M6OkhhbmRsZUhlYXA6
Ok5vZGU6Ok5vZGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFRpbWVvdXRD
aGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmtGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6SklUQ29kZSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmJv
dHRvbVRpZXJKSVQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjp0b3BUaWVySklUKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6bmV4dFRpZXJKSVQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5j
cHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBqaXQv
SklUU3R1YnMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAo
SlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkV2
YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAq
IHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvcik6CisgICAgICAgICog
d3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oOgorICAg
ICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6QmFzaWNSYXdTZW50aW5lbE5vZGUpOgor
ICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0UHJldik6CisgICAgICAgIChX
VEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpzZXROZXh0KToKKyAgICAgICAgKFdURjo6QmFzaWNS
YXdTZW50aW5lbE5vZGU6OnByZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTo6bmV4dCk6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjppc09uTGlzdCk6
CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6OjpTZW50aW5lbExpbmtl
ZExpc3QpOgorICAgICAgICAoV1RGOjo6OmJlZ2luKToKKyAgICAgICAgKFdURjo6OjplbmQpOgor
ICAgICAgICAoV1RGOjo6OnB1c2gpOgorCiAyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHZhcmlhYmxlIHByZWRpY3Rpb25zIG9ubHkgd29y
ayBmb3IgbG9jYWwgdmFyaWFibGVzLCBub3QgdGVtcG9yYXJpZXMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsNyBAQCBTRVQo
SmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYXNzZW1ibGVyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvZGUiCiAg
ICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9ieXRlY29tcGlsZXIiCisgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9kZmciCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9oZWFwIgogICAgICIk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGVidWdnZXIiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElS
fS9pbnRlcnByZXRlciIKQEAgLTU0LDcgKzU1LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlckFjdGl2
YXRpb24uY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCi0KKyAgICAKICAg
ICBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCiAgICAgaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCiAgICAgaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw2ICsxMDIsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oIFwKQEAgLTExNiw2ICsxMTgsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lz
dGVyQmFuay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagko
cmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTU1MCw2ICsxNTUwLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4K
KyAgICAgICAgICAgICAgICA8RmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJk
ZmciCisgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGRmZ1xERkdEcml2ZXIuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAg
ICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgIDwvRmlsdGVyPgog
CQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJyIgogCQkJPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDEwIEBACiAJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsg
fTsKIAkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThE
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsK
KwkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVEMUEw
MEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi87IH07CisJCTBGRDNDODI2MTQxMTVENDAw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
Ki87IH07CisJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjQxNDEx
NUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmggKi87IH07CisJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMzc1LDcgKzM3
OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3MjcwRUQxQ0U2OTAwRjFG
NjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2OUEwNzJCMEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdp
c3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5oICovOyB9OwogCQk5NjlBMDcy
QzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyOTBFRDFDRTY5MDBGMUY2ODEgLyog
U2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0JCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IH07CisJCTk2
OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8q
IENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3Ry
aWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5QTA3OTcwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5
QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29k
ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovOyB9OwogCQk5NjlB
MDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJ
bnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5LDYgKzc4MywxMCBAQAogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFi
bGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0
aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4
MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
cm9wYWdhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNDODI0MTQx
MTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQcm9wYWdhdGlvbi5oOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAv
KiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9j
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEwIEBACiAJCTg2RUM5REIzMTMyOERGNDQw
MDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oICovLAor
CQkJCTBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi8sCisJ
CQkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovLAorCQkJCTBGRDND
ODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTg2RUNBNEYwMTMy
RUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCAqLywKIAkJCQk4NkVDOURCNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwICovLAogCQkJCTg2RUM5REI1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovLApAQCAtMjYxNyw2ICsyNjI5
LDggQEAKIAkJCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkQzQzgyNzE0MTE1RDRGMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8q
IFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzMsNiArMzA0Nyw4IEBA
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0M4MjYxNDExNUQ0MDAw
RkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0MDUx
MUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
ODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDk0NDg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEsMTcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAg
ICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3Rl
ZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworI2lmIENQVShYODZfNjQp
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgWDg2UmVnaXN0ZXJzOjpy
MTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyMTEpKTsKKyNl
bHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRlc3QubV9wdHIp
OworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRp
b24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgYWRk
MzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDkgKzE0MDEsMTAg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1Db2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xU
YWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0ds
b2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBi
b29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBv
cHRpbWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0
ZXJzKDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAt
MTQyMiw2ICsxNDIzLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCiAgICAgLCBtX3NvdXJjZU9mZnNldChz
b3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bVRhYikKKyAgICAsIG1fYWx0ZXJu
YXRpdmUoYWx0ZXJuYXRpdmUpCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKIApAQCAtMTQ0MSwx
NSArMTQ0MywxOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwgaSArIDEpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogIiwgcHJvZmlsZS0+Ynl0ZWNvZGVP
ZmZzZXQpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAic2FtcGxl
cyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJheSA9ICV1XG4i
LAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpLAotICAgICAgICAg
ICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZJbnQzMigpLAotICAgICAgICAgICAgICAgIHBy
b2ZpbGUtPnByb2JhYmlsaXR5T2ZEb3VibGUoKSwKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5w
cm9iYWJpbGl0eU9mQ2VsbCgpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5
T2ZBcnJheSgpKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRlcnIpOworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQogI2VuZGlmCisgICAgCisgICAgLy8gV2Ugc2hvdWxk
IG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0aGVyZSBhcmUgaW5jb21pbmcgY2FsbHMuIEJ1
dAorICAgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGR1cmluZyBoZWFwIGRlc3RydWN0aW9uLCB0aGVu
IHRoZXJlIG1heSBzdGlsbCBiZQorICAgIC8vIGluY29taW5nIGNhbGxzLCB3aGljaCBpcyBoYXJt
bGVzcy4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgb3VyIG91dGdvaW5nIGNhbGxzIHdpbGwgYmUg
cmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCisgICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxp
bmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2YgdGhlIH5DYWxsTGlua0luZm8KKyAg
ICAvLyBkZXN0cnVjdG9ycy4KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgZm9yIChzaXplX3Qgc2l6
ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBA
IC0xNTE5LDYgKzE1MjQsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0CiB7CiAgICAgYm9vbCBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9IGZhbHNlOwogICAgIAorICAg
IGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7CiAgICAg
dmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKICAgICBpZiAobV9yYXJlRGF0YSkg
ewpAQCAtMTc4OSw4ICsxNzk2LDMwIEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9u
KENhbGxGcmEKIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQordm9pZCBDYWxsTGlua0luZm86OnVu
bGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIpCit7CisgICAgQVNTRVJUKGlzTGlua2VkKCkpOworICAgIAorICAgIGlmIChpc0RGRykgewor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxs
IDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisjZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGw/IGdsb2Jh
bERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogZ2xvYmFsRGF0YS5qaXRTdHVi
cy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgaGFzU2VlblNob3VsZFJlcGF0Y2gg
PSBmYWxzZTsKKyAgICBjYWxsZWUuY2xlYXIoKTsKKworICAgIC8vIEl0IHdpbGwgYmUgb24gYSBs
aXN0IGlmIHRoZSBjYWxsZWUgaGFzIGEgY29kZSBibG9jay4KKyAgICBpZiAoaXNPbkxpc3QoKSkK
KyAgICAgICAgcmVtb3ZlKCk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7
CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dW5saW5r
Q2FsbHMoKTsKICAgICBpZiAoIShtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpIHx8IG1fbWV0aG9kQ2Fs
bExpbmtJbmZvcy5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2dsb2JhbERh
dGEtPmNhblVzZUpJVCgpKQpAQCAtMTc5OSwyNCArMTgyOCwxMDEgQEAgdm9pZCBDb2RlQmxvY2s6
OnVubGlua0NhbGxzKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FsbExpbmtJbmZv
cy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoIW1fY2FsbExpbmtJbmZvc1tpXS5pc0xpbmtl
ZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5m
b3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG9w
ZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7Ci0jZWxzZQotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChtX2NhbGxM
aW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2Fs
bCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7Ci0gICAgICAgIG1f
Y2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKKyAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVu
bGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKICAgICB9CiB9CisKK3ZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKK3sKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIodGhpcyk7CisgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1f
aW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVu
bGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKK30KICNlbmRpZgogCiB2b2lkIENv
ZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUoKQogeworICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisg
ICAgICAgIG1fYWx0ZXJuYXRpdmUtPmNsZWFyRXZhbENhY2hlKCk7CiAgICAgaWYgKCFtX3JhcmVE
YXRhKQogICAgICAgICByZXR1cm47CiAgICAgbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLmNs
ZWFyKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCByZXBsYWNlRXhp
c3RpbmdFbnRyaWVzKFZlY3RvcjxUPiYgdGFyZ2V0LCBWZWN0b3I8VD4mIHNvdXJjZSkKK3sKKyAg
ICBBU1NFUlQodGFyZ2V0LnNpemUoKSA8PSBzb3VyY2Uuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldC5zaXplKCk7ICsraSkKKyAgICAgICAgdGFyZ2V0W2ldID0gc291
cmNlW2ldOworfQorCit2b2lkIENvZGVCbG9jazo6Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKQor
eworICAgIGlmICghbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJl
cGxhY2VFeGlzdGluZ0VudHJpZXMobV9jb25zdGFudFJlZ2lzdGVycywgbV9hbHRlcm5hdGl2ZS0+
bV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0
aW9uRGVjbHMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25EZWNscyk7CisgICAgcmVwbGFjZUV4
aXN0aW5nRW50cmllcyhtX2Z1bmN0aW9uRXhwcnMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25F
eHBycyk7Cit9CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSLiBJZiBjb21waWxlT3B0aW1pemVk
KCkgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlCisvLyBlcGlsb2d1ZSwg
ZG8gT1NSIGZyb20gdGhlIG9sZCBjb2RlIGJsb2NrIHRvIHRoZSBuZXcgb25lLgorCisvLyBGSVhN
RTogQWZ0ZXIgZG9pbmcgc3VjY2Vzc2Z1bCBvcHRpbWl6ZWQgY29tcGlsYXRpb24sIHJlc2V0IHRo
ZSBwcm9maWxpbmcgY291bnRlciB0byAtMSwgc28KKy8vIHRoYXQgdGhlIG5leHQgZXhlY3V0aW9u
IG9mIHRoZSBvbGQgY29kZSBibG9jayB3aWxsIGp1bXAgc3RyYWlnaHQgaW50byBjb21waWxlT3B0
aW1pemVkKCkKKy8vIGFuZCBwZXJmb3JtIE9TUi4KKworLy8gRklYTUU6IEVuc3VyZSB0aGF0IGEg
Y2FsbCB0byBjb21waWxlT3B0aW1pemVkKCkganVzdCBkb2VzIE9TUiAoYW5kIHJlc2V0cyB0aGUg
Y291bnRlciB0byAtMSkKKy8vIGlmIHRoZSBjb2RlIGhhZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQu
CisKK0NvZGVCbG9jayogUHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkt
PmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayogRXZhbENvZGVCbG9jazo6cmVw
bGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayog
RnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0
ZWNvZGVGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxs
KTsKK30KKworSlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYg
KHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRK
SVRUeXBlKCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24n
dCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3Ig
PSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29t
cGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgcmV0dXJuIGVycm9yOwor
fQorCitKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFj
ZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUo
KSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0
aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRp
Y19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1p
emVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2Jq
ZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFjZW1lbnQo
KS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUoKSkpIHsK
KyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0aGlzIGFn
YWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXpl
ZEZvcihleGVjLCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0
cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU2Vn
bWVudGVkVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC05OCwxMiArOTksMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RydWN0
IENhbGxMaW5rSW5mbyB7CisgICAgc3RydWN0IENhbGxMaW5rSW5mbzogcHVibGljIEJhc2ljUmF3
U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBDYWxsTGlua0luZm8oKQogICAg
ICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKICAgICAgICAgICAgICwgaXND
YWxsKGZhbHNlKQorICAgICAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgewogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB+Q2FsbExpbmtJbmZvKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlKCk7CisgICAgICAg
IH0KIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb247IC8vIGl0
J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBKSVQsIG9yIGEgbm9ybWFsIGNhbGwgaW4gREZHCiAg
ICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CkBAIC0xMTEsMTMg
KzExOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+IGNhbGxlZTsKICAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAg
ICAgICAgIGJvb2wgaXNDYWxsIDogMTsKKyAgICAgICAgYm9vbCBpc0RGRyA6IDE7CiAKICAgICAg
ICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQotICAgICAgICB2b2lkIHVubGlu
aygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7
Ci0gICAgICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHVu
bGluayhKU0dsb2JhbERhdGEmLCBSZXBhdGNoQnVmZmVyJik7CiAKICAgICAgICAgYm9vbCBzZWVu
T25jZSgpCiAgICAgICAgIHsKQEAgLTIxMCwxMyArMjE1LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUq
LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7
CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsK
ICAgICAgICAgSGVhcCogbV9oZWFwOwogCiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5D
b2RlQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7
IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2Uo
KTsgfQogCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CkBAIC0yNzksNiArMjg3
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCB1bmxpbmtD
YWxscygpOworICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNJbmNvbWluZ0NhbGxzKCkgeyByZXR1
cm4gbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpOyB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbExpbmtJbmZvKiBpbmNv
bWluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21p
bmcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHVubGlua0luY29taW5nQ2Fs
bHMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQpAQCAtMzAwLDggKzMxNywx
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
SklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvciA/IG93bmVyRXhl
Y3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkgOiBvd25lckV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQorICAgICAgICB2b2lkIHNldEpJVENv
ZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJp
dHlDaGVjaykKKyAgICAgICAgeworICAgICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKKyAgICAg
ICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOworICAg
ICAgICB9CisgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7
IH0KKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRD
b2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlUG9vbCogZXhlY3V0YWJsZVBvb2wo
KSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBvb2woKTsgfQorICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKikgPSAwOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7
CisjZWxzZQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBK
SVRDb2RlOjpCYXNlbGluZUpJVDsgfQogI2VuZGlmCiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0
KCk7IH0KQEAgLTM5OCw2ICs0MjUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8VmFsdWVQcm9maWxlLCBp
bnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3ZhbHVlUHJvZmlsZXMsIG1fdmFs
dWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQorICAgICAgICBW
YWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGludCBhcmd1bWVudEluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBhcmd1bWVudEluZGV4IC0gMTsKKyAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID49IG1fdmFsdWVQcm9m
aWxlcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBWYWx1
ZVByb2ZpbGUqIHJlc3VsdCA9IHZhbHVlUHJvZmlsZShhcmd1bWVudEluZGV4IC0gMSk7CisgICAg
ICAgICAgICBpZiAocmVzdWx0LT5ieXRlY29kZU9mZnNldCAhPSAtMSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICNlbmRp
ZgogCiAgICAgICAgIHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbmZvQ291bnQoKSBjb25zdApAQCAt
NTM1LDYgKzU3MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRXZhbENvZGVDYWNoZSYg
ZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKICAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgp
OworICAgICAgICAKKyAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2V4ZWN1dGVDb3VudGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRl
cjsKIAogICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2
YXRlLgogCkBAIC01OTQsNiArNjQ1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5mb3M7CiAgICAgICAgIFZlY3Rv
cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgVmVjdG9yPE1ldGhvZENh
bGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9zOworICAgICAgICBKSVRDb2RlIG1faml0
Q29kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrOworICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+ID4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC02MTAsNiArNjY0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAKKyAgICAgICAgT3du
UHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsgLy8gRklYTUUgbWFrZSB0aGlzIGRvIHNvbWV0
aGluZworCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6CkBAIC02NDYsOSArNzAyLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCiAKICAgICBjbGFz
cyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0KQot
ICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFs
T2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAmbV91bnNoYXJlZFN5bWJvbFRh
YmxlLCBmYWxzZSkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0
ZXJuYXRpdmUpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVU
eXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hh
cmVkU3ltYm9sVGFibGUsIGZhbHNlLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTY1OCwxNiArNzE0LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJv
Z3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJj
ZVByb3ZpZGVyLCAwKQorICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgUGFz
c093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBHbG9iYWxDb2Rl
QmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92
aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICAKKyNp
ZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2
aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogICAgIH07CiAKICAgICBj
bGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGlj
OgotICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgpCi0gICAgICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJj
ZVByb3ZpZGVyLCAwKQorICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgsIFBhc3NPd25Q
dHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIs
IDAsIGFsdGVybmF0aXZlKQogICAgICAgICAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGJhc2VTY29w
ZURlcHRoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTY4MSw2ICs3NDMsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0eSgpKTsKICAg
ICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKICAgICAgICAgfQorICAgICAg
ICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7CkBAIC02OTMsMTQgKzc2MSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYXMgd2UgbmVlZCB0byBpbml0aWFsaXNlIHRo
ZSBDb2RlQmxvY2sgYmVmb3JlIHdlIGNvdWxkIGluaXRpYWxpc2UgYW55IFJlZlB0ciB0byBob2xk
IHRoZSBzaGFyZWQKICAgICAgICAgLy8gc3ltYm9sIHRhYmxlLCBzbyB3ZSBqdXN0IHBhc3MgYXMg
YSByYXcgcG9pbnRlciB3aXRoIGEgcmVmIGNvdW50IG9mIDEuICBXZSB0aGVuIG1hbnVhbGx5IGRl
cmVmCiAgICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9yLgotICAgICAgICBGdW5jdGlvbkNvZGVC
bG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5
cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1
Y3RvcikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9s
VGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlz
Q29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAg
ICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwg
c291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgp
LmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvciwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAg
ICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2soKQogICAgICAgICB7CiAgICAgICAgICAg
ICBzaGFyZWRTeW1ib2xUYWJsZSgpLT5kZXJlZigpOwogICAgICAgICB9CisgICAgICAgIAorI2lm
IEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZp
cnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAgICAgfTsKIAogICAgIGlu
bGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDk0NDg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBjb3VudHMgKiBjZXJ0YWludHkgLyBudW1iZXJP
ZlNhbXBsZXM7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZklu
dDMycygpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwpAQCAtMTQy
LDYgKzE0Miw4NiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB7CiAgICAgICAgIHJldHVy
biBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJheXMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkp
OwogICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAg
IHsKKyAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAgICAgInNhbXBsZXMgPSAldSwg
aW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJyYXkgPSAldSIsCisgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnQz
MnMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRvdWJsZXMoKSwKKyAgICAgICAgICAgICAg
ICBudW1iZXJPZkNlbGxzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcnJheXMoKSk7Cisg
ICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0g
fHwgISF3ZWFrQnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAg
ICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIjogIik7CisgICAgICAgICAgICAgICAgICAg
IGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwg
IiVzIiwgSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pLmRlc2NyaXB0aW9uKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0c1tpXSkKKyAgICAgICAgICAgICAg
ICBmcHJpbnRmKG91dCwgIkRlYWRDZWxsIik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAg
ICAKKyAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CisgICAgICAgIHVuc2lnbmVkIHNhbXBsZXM7Cisg
ICAgICAgIHVuc2lnbmVkIGludDMyczsKKyAgICAgICAgdW5zaWduZWQgZG91YmxlczsKKyAgICAg
ICAgdW5zaWduZWQgY2VsbHM7CisgICAgICAgIHVuc2lnbmVkIGFycmF5czsKKyAgICB9OworCisg
ICAgLy8gT3B0aW1pemVkIG1ldGhvZCBmb3IgZ2V0dGluZyBhbGwgY291bnRzIGF0IG9uY2UuCisg
ICAgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0YXRp
c3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBzYW1wbGVz
ID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50MzJzICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGRv
dWJsZXMgPSAwOworICAgICAgICB1bnNpZ25lZCBjZWxscyAgID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgYXJyYXlzICA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnVja2V0c1tpXSkg
eworICAgICAgICAgICAgICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldCA9IHdlYWtCdWNrZXRzW2ld
OworICAgICAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2FtcGxlcysrOworICAgICAgICAgICAgICAgICAgICBjZWxscysrOworICAgICAgICAgICAg
ICAgICAgICBpZiAod2Vha0J1Y2tldC5nZXRDbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZv
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzKys7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBzYW1wbGVzKys7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSk7Cisg
ICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgICAgIGludDMycysr
OworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAg
ICBkb3VibGVzKys7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAg
ICAgICAgICAgICAgIGNlbGxzKys7CisgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheSgmZ2xv
YmFsRGF0YSwgdmFsdWUuYXNDZWxsKCkpKQorICAgICAgICAgICAgICAgICAgICBhcnJheXMrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlzdGljcy5z
YW1wbGVzID0gc2FtcGxlczsKKyAgICAgICAgc3RhdGlzdGljcy5pbnQzMnMgID0gaW50MzJzOwor
ICAgICAgICBzdGF0aXN0aWNzLmRvdWJsZXMgPSBkb3VibGVzOworICAgICAgICBzdGF0aXN0aWNz
LmNlbGxzICAgPSBjZWxsczsKKyAgICAgICAgc3RhdGlzdGljcy5hcnJheXMgID0gYXJyYXlzOwor
ICAgIH0KICAgICAKICAgICBpbnQgYnl0ZWNvZGVPZmZzZXQ7IC8vIC0xIGZvciBwcm9sb2d1ZQog
ICAgIEVuY29kZWRKU1ZhbHVlIGJ1Y2tldHNbbnVtYmVyT2ZCdWNrZXRzXTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyAr
MTkxLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2VydmVMYXN0VmFyKAogICAgICAg
ICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgpOwogfQogCi1CeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFt
Q29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
bXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hv
b2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxk
RW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmls
aW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9i
YWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKQEAgLTIyOCw2ICsyMjgsOSBAQCBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgCiAgICAgbV9jb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyA9IDE7IC8vIEFsbG9jYXRlIHNwYWNlIGZvciAidGhpcyIK
ICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2NrLT5tX251bVZhcnM7
CisgICAgCisgICAgaWYgKGNvbXBpbGF0aW9uS2luZCA9PSBPcHRpbWl6aW5nQ29tcGlsYXRpb24p
CisgICAgICAgIHJldHVybjsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
Y29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yNTgsNyArMjYxLDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIH0KIH0KIAotQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVD
aGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRF
bWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hT
b3VyY2VJbmZvKCkpCkBAIC00MTksNyArNDIyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKEZ1bgogICAgIH0KIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2NrKQorQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAsIG1f
c2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRz
UHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWlu
LT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5MiwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0
RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKCk7CiAKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0
b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgUHJvZ3JhbUNv
ZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwg
U2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayopOwotICAgICAgICBCeXRl
Y29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBF
dmFsQ29kZUJsb2NrKik7CisgICAgICAgIGVudW0gQ29tcGlsYXRpb25LaW5kIHsgRmlyc3RDb21w
aWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0aW9uIH07CisgICAgICAgIAorICAgICAgICBCeXRl
Y29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUq
LCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUq
LCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRv
cihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2Nr
KiwgQ29tcGlsYXRpb25LaW5kKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEo
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRl
bnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5w
cm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSAr
NDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gVGhpcyBjbGFzcyBp
cyB1c2VkIHRvIGNvbXBpbGUgdGhlIGRhdGFmbG93IGdyYXBoIGZyb20gYSBDb2RlQmxvY2suCiBj
bGFzcyBCeXRlQ29kZVBhcnNlciB7CiBwdWJsaWM6Ci0gICAgQnl0ZUNvZGVQYXJzZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR3JhcGgmIGdyYXBoKQor
ICAgIEJ5dGVDb2RlUGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgR3JhcGgmIGdyYXBoKQogICAgICAg
ICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVC
bG9jaykKKyAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAgICAg
LCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCiAgICAgICAgICwg
bV9wYXJzZUZhaWxlZChmYWxzZSkKQEAgLTY1LDYgKzY2LDkgQEAgcHVibGljOgogICAgICAgICAs
IG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAg
ICB7CisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAgICBBU1NFUlQobV9w
cm9maWxlZEJsb2NrKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIFBhcnNlIGEgZnVsbCBDb2Rl
QmxvY2sgb2YgYnl0ZWNvZGUuCkBAIC00MjEsOCArNDI1LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CiAgICAgICAgIE5vZGVJbmRleCBjYWxs
ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhQcmVkaWN0
Tm9uZSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICBpZiAoaW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRf
cmVzdWx0KQorICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAgICBzZXQo
cHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgICAgIGR5bmFtaWNh
bGx5UHJlZGljdChjYWxsLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCkp
OworICAgICAgICB9CiAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAg
bV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFy
Z0NvdW50OwogICAgICAgICByZXR1cm4gY2FsbDsKQEAgLTQ2Miw5ICs0NjgsMzIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoIW1fcmV1c2FibGVOb2RlU3RhY2su
aXNFbXB0eSgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBkeW5hbWljYWxseVByZWRpY3QoTm9k
ZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICB7CisjaWYgRU5B
QkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUg
PSBtX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBBU1NFUlQocHJvZmlsZSk7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICAgICAgcHJpbnRmKCJEeW5hbWljIHByZWRpY3Rpb24gWyV1LCAldV06ICIsIG5vZGVJbmRl
eCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAg
ICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVk
aWN0KG1ha2VQcmVkaWN0aW9uKCptX2dsb2JhbERhdGEsICpwcm9maWxlKSwgRHluYW1pY1ByZWRp
Y3Rpb24pOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7CisgICAgICAg
IFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICB2
b2lkIGR5bmFtaWNhbGx5UHJlZGljdChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgZHluYW1pY2FsbHlQcmVkaWN0KG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgpOworICAgIH0K
IAogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3Jh
cGg7CiAKICAgICAvLyBUaGUgY3VycmVudCBibG9jayBiZWluZyBnZW5lcmF0ZWQuCkBAIC01NjMs
NyArNTkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXgpKTsKICAgICAg
ICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsKICAgICAgICAgfQotCisgICAgICAgIAogICAg
ICAgICAvLyBTd2l0Y2ggb24gdGhlIGN1cnJlbnQgYnl0ZWNvZGUgb3Bjb2RlLgogICAgICAgICBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2N1
cnJlbnRJbmRleDsKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3Vy
cmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKQEAgLTg4Myw2ICs5MTIsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIE5vZGVJbmRl
eCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRp
Y3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJv
cGVydHkpKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBnZXRCeVZhbCk7CisgICAgICAgICAgICBkeW5hbWljYWxseVByZWRpY3QoZ2V0QnlWYWwpOwog
ICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRCeVZhbChnZXRCeVZhbCk7CiAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwpAQCAtOTEyLDYgKzk0Miw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRvR3JhcGgoR2V0TWV0aG9kLCBPcEluZm8o
aWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAgICAgICAgc2V0
KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0TWV0aG9kKTsKKyAgICAgICAgICAgIGR5
bmFtaWNhbGx5UHJlZGljdChnZXRNZXRob2QpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRH
ZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50
SW5kZXggKz0gT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfaWQpOwpAQCAtOTI1LDYgKzk1Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdl
dEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFBy
ZWRpY3ROb25lKSwgYmFzZSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgZ2V0QnlJZCk7CisgICAgICAgICAgICBkeW5hbWljYWxseVByZWRpY3QoZ2V0
QnlJZCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV9pZCk7CkBAIC0xMzUwLDcgKzEzODIsNyBA
QCBib29sIHBhcnNlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXRhKiBnCiAgICAgVU5VU0VEX1BB
UkFNKGNvZGVCbG9jayk7CiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gQnl0
ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBncmFwaCkucGFyc2UoKTsKKyAgICBy
ZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCksIGdyYXBoKS5wYXJzZSgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgorI2luY2x1ZGUgIkRGR0pJVENv
bXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBD
b21waWxlT3RoZXIgfTsKK2lubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0
Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgR3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERh
dGEsIGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoY29t
cGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQorICAgICAgICBkZmcucHJlZGljdEFyZ3VtZW50
VHlwZXMoY2FsbGVlQXJnc0V4ZWMsIGNvZGVCbG9jayk7CisgICAgCisgICAgcHJvcGFnYXRlKGRm
ZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBKSVRDb21waWxlciBkYXRhRmxv
d0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CisgICAgaWYgKGNvbXBpbGVNb2RlID09
IENvbXBpbGVGdW5jdGlvbikgeworICAgICAgICBBU1NFUlQoaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklULmNvbXBpbGVGdW5jdGlvbihqaXRDb2Rl
LCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
Y29tcGlsZU1vZGUgPT0gQ29tcGlsZU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZShqaXRD
b2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdHJ5Q29tcGlsZShFeGVj
U3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlKQorewor
ICAgIHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywgMCwgY29kZUJsb2NrLCBqaXRD
b2RlLCAwKTsKK30KKworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBF
eGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYg
aml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCit7
CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjYWxsZWVBcmdzRXhl
YywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdEcml2ZXJfaAorI2RlZmluZSBERkdEcml2ZXJfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBKSVRDb2RlOworY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OworCituYW1lc3BhY2UgREZHIHsKKworI2lmIEVOQUJMRShERkdfSklUKQorYm9vbCB0cnlDb21w
aWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKTsKK2Jvb2wgdHJ5Q29tcGlsZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayos
IEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjayk7
CisjZWxzZQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBK
SVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIHRyeUNvbXBpbGVGdW5jdGlv
bihFeGVjU3RhdGUqLCBFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMCBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgfQogICAgIGlmIChvcCA9PSBK
U0NvbnN0YW50KSB7CiAgICAgICAgIHByaW50ZigiJXMkJXUiLCBoYXNQcmludGVkID8gIiwgIiA6
ICIiLCBub2RlLmNvbnN0YW50TnVtYmVyKCkpOworICAgICAgICBpZiAoY29kZUJsb2NrKSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxv
Y2spOworICAgICAgICAgICAgcHJpbnRmKCIgPSAlcyIsIHZhbHVlLmRlc2NyaXB0aW9uKCkpOwor
ICAgICAgICB9CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAgKG5v
ZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7CkBAIC0xODYsMTcgKzE5MCw0NyBAQCB2
b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiAgICAgfQogfQogCi12b2lkIEdy
YXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEdyYXBoOjpw
cmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJn
KSB7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZyAt
IDEpOwotICAgICAgICBpZiAoYXJndW1lbnRWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICBt
X2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKLSAgICAg
ICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgbV9hcmd1
bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVkaWN0RG91YmxlOworICAgIGlmIChl
eGVjKSB7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWluKGV4ZWMt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXpl
KCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgbnVtYmVy
T2ZBcmd1bWVudHM7ICsrYXJnKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50VmFsdWUg
PSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudFZhbHVl
LmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5t
X3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50VmFs
dWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJn
XS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisjaWYg
RU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIEFTU0VSVChjb2RlQmxvY2spOworICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKTsKKworICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIEFTU0VSVChjb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycyA+PSAxKTsKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKTsgKythcmcpIHsK
KyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPnZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBw
cmludGYoIkFyZ3VtZW50IHByb2ZpbGUgWyVsdV06ICIsIGFyZyk7CisgICAgICAgIHByb2ZpbGUt
PmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIAor
ICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1
ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2ZpbGUpKTsKKyAgICAgICAgCisjaWYg
REZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIs
IHByZWRpY3Rpb25Ub1N0cmluZyhtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlKSk7
CisjZW5kaWYKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworI2Vu
ZGlmCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw5IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPFJlZ2lzdGVyRmlsZS5oPgotI2luY2x1ZGUg
PGRmZy9ERkdOb2RlLmg+CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHTm9k
ZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
QEAgLTEzNSwxMiArMTM2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2Jsb2Nrc1ti
bG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KIAotICAg
IHZvaWQgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVk
aWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIHVuc2ln
bmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkgKyBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50
XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVQ
cmVkaWN0aW9ucy5zaXplKCkpIHsKQEAgLTE0OCwzNyArMTQ4LDM3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fdmFyaWFibGVQcmVkaWN0aW9ucy5yZXNpemUob3BlcmFuZCArIDEpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZVByZWRpY3Rp
b25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVQcmVkaWN0aW9uc1tv
cGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwg
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBi
b29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgSGFzaE1h
cDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9iYWxWYXJQ
cmVkaWN0aW9ucy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAgICBpZiAoaXRlciA9PSBtX2ds
b2JhbFZhclByZWRpY3Rpb25zLmVuZCgpKSB7CiAgICAgICAgICAgICBQcmVkaWN0aW9uU2xvdCBw
cmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uU2xv
dC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFsdWUs
IG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgICAgICAgICAgbV9nbG9i
YWxWYXJQcmVkaWN0aW9ucy5hZGQodmFyTnVtYmVyICsgMSwgcHJlZGljdGlvblNsb3QpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtZXJn
ZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rp
b24sIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5z
ZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChOb2RlJiBu
b2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6
Ci0gICAgICAgICAgICBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbiwgc291cmNlKTsK
KyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbiwgc291
cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAg
ICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwg
c291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RH
bG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAg
Y2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAg
ICAgICAgIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgcmV0
dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTIyNiwxMiArMjI2LDQzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biBQcmVkaWN0Tm9uZTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvLyBIZWxwZXIgbWV0
aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgorICAgIGJvb2wgaXNDb25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCku
aXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNDb25zdGFudCgp
OworICAgIH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgp
LmlzSW50MzJDb25zdGFudChjb2RlQmxvY2spOworICAgIH0KKyAgICBib29sIGlzRG91YmxlQ29u
c3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jayk7
CisgICAgfQorICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBu
b2Rlcy4KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2Nr
LCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRl
eCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgaW50MzJfdCB2YWx1
ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZJbnQzMkNvbnN0
YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKTsK
KyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFtZShO
b2RlVHlwZSk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0
YXRlKik7CisgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqKTsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAg
ICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTQ0ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTEzLDYgKzkxMyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxs
TGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxsID0gbV9qc0NhbGxzW2ldLm1faXNDYWxs
OworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9j
YXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxz
W2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8u
aG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ld
Lm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNywzOSArMjA3LDE0IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29u
c3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGdyYXBoKClbbm9kZUluZGV4XS5pc0NvbnN0YW50KCk7Ci0gICAgfQot
ICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAg
ICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9v
bCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNKU0NvbnN0YW50KG5vZGVJbmRl
eCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051bWJlcigpOwotICAgIH0KKyAg
ICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5p
c0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9Cisg
ICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3Jh
cGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBib29s
IGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5p
c0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAgICAgLy8gSGVscGVy
IG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFsdWUgdmFs
dWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5k
ZXggPSBncmFwaCgpW25vZGVJbmRleF0uY29uc3RhbnROdW1iZXIoKTsKLSAgICAgICAgcmV0dXJu
IGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ICsgY29uc3RhbnRJbmRleCkuZ2V0KCk7Ci0gICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMy
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0lu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpLmFzSW50MzIoKTsKLSAgICB9Ci0gICAgZG91YmxlIHZhbHVlT2ZEb3VibGVD
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRG91
YmxlQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAgIH0KKyAgICBKU1ZhbHVlIHZh
bHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBpbnQzMl90IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCku
dmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBkb3Vi
bGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdy
YXBoKCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNo
ZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBERkdfSklUX0FTU0VSVApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDkgQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTk1LDYgKzE5
OCw3IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RBcnJheSAKIHN0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Owogc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RUb3AgICAgPSAweDBmOwogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgRHluYW1pY1By
ZWRpY3Rpb25UYWcgPSAweDgwOwogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlv
blRhZ01hc2sgICAgPSAweDgwOwogCkBAIC0yMDIsNyArMjA2LDcgQEAgZW51bSBQcmVkaWN0aW9u
U291cmNlIHsgU3RhdGljUHJlZGljdGlvbgogCiBpbmxpbmUgYm9vbCBpc0NlbGxQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxs
KSA9PSBQcmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgflByZWRpY3RBcnJheSk7CisgICAgcmV0dXJu
ICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgfihQcmVk
aWN0QXJyYXkgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwogfQogCiBpbmxpbmUgYm9vbCBpc0FycmF5
UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjIyLDcgKzIyNiw3IEBAIGlubGlu
ZSBib29sIGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0ZWQKIAogaW5saW5lIGJvb2wgaXNOdW1i
ZXJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICEhKHZhbHVl
ICYgUHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH5QcmVkaWN0TnVtYmVyKTsKKyAgICByZXR1
cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZhbHVlICYgfihQcmVkaWN0TnVtYmVy
IHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0KIAogaW5saW5lIGJvb2wgaXNEeW5hbWljUHJlZGlj
dGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjMxLDYgKzIzNSw0MiBAQCBpbmxpbmUgYm9v
bCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlCiAgICAgcmV0dXJuICEhKHZhbHVlICYgRHlu
YW1pY1ByZWRpY3Rpb25UYWcpOwogfQogCisjaWZuZGVmIE5ERUJVRworaW5saW5lIGNvbnN0IGNo
YXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIGlmIChp
c0R5bmFtaWNQcmVkaWN0aW9uKHZhbHVlKSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflBy
ZWRpY3Rpb25UYWdNYXNrKSB7CisgICAgICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAgICAg
ICByZXR1cm4gInAtZHluLWJvdHRvbSI7CisgICAgICAgIGNhc2UgUHJlZGljdENlbGw6CisgICAg
ICAgICAgICByZXR1cm4gInAtZHluLWNlbGwiOworICAgICAgICBjYXNlIFByZWRpY3RBcnJheToK
KyAgICAgICAgICAgIHJldHVybiAicC1keW4tYXJyYXkiOworICAgICAgICBjYXNlIFByZWRpY3RJ
bnQzMjoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4taW50MzIiOworICAgICAgICBjYXNlIFBy
ZWRpY3ROdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLW51bWJlciI7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLXRvcCI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAg
IHJldHVybiAicC1zdGF0LWJvdHRvbSI7CisgICAgY2FzZSBQcmVkaWN0Q2VsbDoKKyAgICAgICAg
cmV0dXJuICJwLXN0YXQtY2VsbCI7CisgICAgY2FzZSBQcmVkaWN0QXJyYXk6CisgICAgICAgIHJl
dHVybiAicC1zdGF0LWFycmF5IjsKKyAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgcmV0
dXJuICJwLXN0YXQtaW50MzIiOworICAgIGNhc2UgUHJlZGljdE51bWJlcjoKKyAgICAgICAgcmV0
dXJuICJwLXN0YXQtbnVtYmVyIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gInAtc3Rh
dC10b3AiOworICAgIH0KK30KKyNlbmRpZgorCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtZXJnZVBy
ZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKICAg
ICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSA9PSBpc0R5bmFtaWNQcmVkaWN0aW9uKHJp
Z2h0KSkKQEAgLTI0NSw5ICsyODUsMTIgQEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVk
aWN0aW9ucyhQcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgbWVyZ2VQ
cmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQpCitpbmxpbmUgYm9vbCBtZXJn
ZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKLSAgICBsZWZ0ID0g
c3RhdGljX2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBl
PihsZWZ0KSwgcmlnaHQpKTsKKyAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBzdGF0
aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KGxl
ZnQpLCByaWdodCkpOworICAgIGJvb2wgcmVzdWx0ID0gbmV3UHJlZGljdGlvbiAhPSBzdGF0aWNf
Y2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KTsKKyAgICBsZWZ0ID0gbmV3UHJlZGljdGlvbjsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlv
bihQcmVkaWN0ZWRUeXBlIHR5cGUsIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQpAQCAtMjU5LDIz
ICszMDIsMzEgQEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oUHJlZAogICAg
IHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlvbiA/IER5bmFtaWNQcmVk
aWN0aW9uVGFnIDogMCk7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1pbmxpbmUgY29uc3QgY2hhciog
cHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCisjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQoraW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUpCiB7Ci0gICAgc3dp
dGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0gICAgICAgIHJldHVybiAicC1i
b3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgIHJldHVybiAicC1jZWxsIjsK
LSAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgcmV0dXJuICJwLWFycmF5IjsKLSAgICBj
YXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJwLWludDMyIjsKLSAgICBjYXNlIFBy
ZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC1udW1iZXIiOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAicC10b3AiOwotICAgIH0KKyAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3Rp
Y3Mgc3RhdGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEs
IHN0YXRpc3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAg
ICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3Rh
dGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHluYW1pY1ByZWRpY3Rpb25UYWcgfCBQ
cmVkaWN0RG91YmxlOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmludDMycyArIHN0YXRpc3Rp
Y3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBEeW5hbWlj
UHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3Mu
YXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5bmFtaWNQcmVk
aWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmNlbGxz
ID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9u
VGFnIHwgUHJlZGljdENlbGw7CisgICAgCisgICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdFRvcDsKIH0KICNlbmRpZgogCkBAIC0zNTYsNiArNDA3LDMzIEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7CiAgICAgICAgIHJldHVybiBtX29w
SW5mbzsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNvbnN0YW50
UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudE51bWJlcigpKS5n
ZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZK
U0NvbnN0YW50KGNvZGVCbG9jaykuaXNJbnQzMigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
RG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1
cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNOdW1iZXIo
KTsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoY29k
ZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmFz
SW50MzIoKTsKKyAgICB9CisKKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29uc3RhbnQo
Y29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2sp
LnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIH0KIAogICAgIGJvb2wgaGFzTG9jYWwoKQogICAg
IHsKQEAgLTQ3MCw3ICs1NDgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihtX29wSW5mbzIpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJj
ZSkKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9u
U291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNQcmVkaWN0aW9uKCkpOwog
ICAgICAgICAKQEAgLTQ3OCwxNiArNTU2LDE5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLy8g
dG8gaGVhcCBsb2FkcyBhcyB3ZWxsIGFzIGNhbGxzIGlzIG5vdCBwcm9maXRhYmxlLCBhcyB0aGVz
ZSBwcmVkaWN0aW9ucwogICAgICAgICAvLyBhcmUgd3JvbmcgdG9vIG9mdGVuLiBIZW5jZSwgdGhp
cyBjb21wbGV0ZWx5IGlnbm9yZXMgc3RhdGljIHByZWRpY3Rpb25zLgogICAgICAgICBpZiAoc291
cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVk
aWN0Tm9uZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgICAgIEFTU0VSVChzb3VyY2UgPT0gRHluYW1pY1ByZWRpY3Rpb24pOwog
ICAgICAgICAKLSAgICAgICAgbV9vcEluZm8yIHw9IER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgcHJl
ZGljdGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gRHluYW1pY1By
ZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOworICAgICAgICBib29sIHJlc3VsdCA9IG1fb3BJbmZv
MiAhPSBuZXdQcmVkaWN0aW9uOworICAgICAgICBtX29wSW5mbzIgfD0gbmV3UHJlZGljdGlvbjsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRpb24u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHUHJvcGFnYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKSAmJiBFTkFCTEUoRFlOQU1J
Q19PUFRJTUlaQVRJT04pCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByb3BhZ2F0b3IgeworcHVibGljOgorICAgIFBy
b3BhZ2F0b3IoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2spCisgICAgICAgIDogbV9ncmFw
aChncmFwaCkKKyAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVk
QmxvY2spCisgICAgeworICAgICAgICBtX3ByZWRpY3Rpb25zLnJlc2l6ZShtX2dyYXBoLnNpemUo
KSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0Tm9uZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaXhwb2ludCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisg
ICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8v
IEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2Fs
bHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2RlLgorICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Cisg
ICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUg
bGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAgICAgIC8vIGNh
dXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFj
a3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6
ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAgICAvLyBm
b3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxv
dy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRl
QmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEbyBhbm90aGVyIGZvcndhcmQg
cGFzcyBiZWNhdXNlIGZvcndhcmQgcGFzc2VzIGFyZSBvbiBhdmVyYWdlIG1vcmUKKyAgICAgICAg
ICAgIC8vIHByb2ZpdGFibGUuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBp
bGVJbmRleF0gPT0gcHJlZGljdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID0gcHJlZGljdGlvbjsKKyAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZVByZWRpY3Rp
b24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKERGRzo6bWVy
Z2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdLCBwcmVkaWN0aW9uKSkK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJv
cGFnYXRlTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBOb2RlVHlw
ZSBvcCA9IG5vZGUub3A7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBKU0Nv
bnN0YW50OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25z
dGFudChtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUo
KSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RE
b3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJm1fZ2xvYmFsRGF0YSwgY2VsbCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEFy
cmF5LCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgRHlu
YW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgRHluYW1pY1ByZWRpY3Rpb24p
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICBpZiAoaXNE
eW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8
PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQx
KCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBEeW5hbWljUHJlZGljdGlvbik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5kOgor
ICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBC
aXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hp
ZnQ6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1
ZVRvTnVtYmVyOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX3By
ZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIGlmIChp
c051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgICAgIG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVtYmVyLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGls
ZDIoKV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9u
KGxlZnQpICYmIGlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVByZWRp
Y3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRpY3Rpb24p
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVk
aWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIER5bmFtaWNQcmVkaWN0aW9uKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0
ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkgJiYgaXNEeW5hbWljUHJlZGljdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24obWVyZ2VQcmVk
aWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90Ogor
ICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJF
cToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVx
OgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc2Fk
LCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVkaWN0aW9uLCBldmVuIHRob3VnaCB3ZSBl
YXNpbHkKKyAgICAgICAgICAgIC8vIGNvdWxkLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbiht
YWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5SWQ6
CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAg
ICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7CisgICAgICAgICAgICBpZiAo
aXNEeW5hbWljUHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIER5
bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZS52
YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0
R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xv
YmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+
UHJlZGljdGlvblRhZ01hc2ssIER5bmFtaWNQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIC8vIFRo
ZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCisgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAg
Y2FzZSBERkc6Okp1bXA6CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFJldHVy
bjoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Cisg
ICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBi
ZWNhdXNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIGZvciB0aGVtLCB5ZXQuCisgICAgICAgIGNh
c2UgUmVzb2x2ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgY2FzZSBSZXNv
bHZlQmFzZVN0cmljdFB1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
I2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVGb3J3YXJk
KCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdh
dGluZyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICht
X2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9j
b21waWxlSW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVCYWNrd2FyZCgpCisgICAg
eworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiUHJvcGFnYXRpbmcgYmFj
a3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKG1fY29tcGls
ZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykKKyAgICAgICAg
ICAgIHByb3BhZ2F0ZU5vZGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0KKyAgICAK
KyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKKyAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2Nr
OworICAgIAorICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICAKKyAgICBWZWN0b3I8
UHJlZGljdGVkVHlwZSwgMTY+IG1fcHJlZGljdGlvbnM7CisKKyNpZiBERkdfREVCVUdfVkVSQk9T
RQorICAgIHVuc2lnbmVkIG1fY291bnQ7CisjZW5kaWYKKyAgICAKKyAgICBib29sIG1fY2hhbmdl
ZDsKK307CisKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsK
KyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7
CisgICAgQVNTRVJUKHByb2ZpbGVkQmxvY2spOworICAgIAorICAgIFByb3BhZ2F0b3IgcHJvcGFn
YXRvcihncmFwaCwgKmdsb2JhbERhdGEsIGNvZGVCbG9jaywgcHJvZmlsZWRCbG9jayk7CisgICAg
cHJvcGFnYXRvci5maXhwb2ludCgpOworICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAg
Z3JhcGguZHVtcChjb2RlQmxvY2spOworI2VuZGlmCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBFTkFCTEUoRFlOQU1JQ19PUFRJ
TUlaQVRJT04pCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wYWdhdGlvbl9oCisj
ZGVmaW5lIERGR1Byb3BhZ2F0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSA8ZGZnL0RGR0dyYXBoLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7
CitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVzcGFjZSBERkcgeworCisvLyBQcm9wYWdhdGUg
ZHluYW1pYyBwcmVkaWN0aW9ucyBmcm9tIHZhbHVlIHNvdXJjZXMgdG8gdmFyaWFibGVzLgorI2lm
IEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNH
bG9iYWxEYXRhKiwgQ29kZUJsb2NrKik7CisjZWxzZQoraW5saW5lIHZvaWQgcHJvcGFnYXRlKEdy
YXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKikgeyB9CisjZW5kaWYKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1
OTMsOSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGluCiAgICAgICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlua0luZm8u
Y2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5m
by5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIsIGNvZGVQdHIpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAg
ICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbCgmY2FsbExpbmtJbmZv
KTsKICAgICB9CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDk0NDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTgsNiArMjE4LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cAogICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXApCiAgICAgLCBtX3dlYWtPd25lcigwKQog
ICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4
dCgwKQogewogfQogCkBAIC0yMjUsNiArMjI3LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6
Ok5vZGUoV1RGOjpTZW50aQogICAgIDogbV9oYW5kbGVIZWFwKDApCiAgICAgLCBtX3dlYWtPd25l
cigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAs
IG1fbmV4dCgwKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNiArOTMsMTYgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlQgogewogfQogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKK3ZvaWQg
SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kIGtpbmQpCit7
CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0z
MihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IDEgOiAzMCksIEFic29sdXRlQWRkcmVz
cygmbV9jb2RlQmxvY2stPm1fZXhlY3V0ZUNvdW50ZXIpKTsKKyAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IGN0aV9vcHRpbWl6ZV9m
cm9tX2xvb3AgOiBjdGlfb3B0aW1pemVfZnJvbV9yZXQpOworICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKK30KKyNlbmRpZgorCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKIHsKQEAgLTEwMiw2ICsxMTIs
OCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc3R1YkNhbGwuY2FsbCh0aW1l
b3V0Q2hlY2tSZWdpc3Rlcik7CiAgICAgc3R1YkNhbGwuZ2V0QXJndW1lbnQoMCwgcmVnVDEsIHJl
Z1QwKTsgLy8gcmVsb2FkIGxhc3QgcmVzdWx0IHJlZ2lzdGVycy4KICAgICBza2lwVGltZW91dC5s
aW5rKHRoaXMpOworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0
aW9uQ2hlY2spOwogfQogI2Vsc2UKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKQEAgLTEx
MSw2ICsxMjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc2tpcFRpbWVv
dXQubGluayh0aGlzKTsKIAogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAKKyAg
ICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKIH0KICNlbmRp
ZgogCkBAIC02MjMsNyArNjM3LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQ
dHIqIGZ1bgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0
eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLQorICAgIAogICAg
IHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiB9CiAKQEAgLTYzNyw2ICs2NTEsOSBAQCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1
bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtl
ZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxs
TGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5o
b3RQYXRoT3RoZXIsIGNvZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9j
aykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsTGlu
a0luZm8pOwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250
aW51ZSB0byB0cnkgdG8gbGluay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NzIsNiArOTcyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBMb2Fk
cyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcgaW50byBk
c3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAgICAKKyAgICAgICAg
ZW51bSBPcHRpbWl6YXRpb25DaGVja0tpbmQgeyBMb29wT3B0aW1pemF0aW9uQ2hlY2ssIFJldE9w
dGltaXphdGlvbkNoZWNrIH07CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAg
ICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kKTsKKyNl
bHNlCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNr
S2luZCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIHZvaWQgZW1pdFRpbWVvdXRDaGVj
aygpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5
cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Niw2ICsxMDYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZhcmFyZ3NTbG93Q2FzZShJCiAK
IHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAg
CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAog
ICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTExOCw2ICsxMjAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29w
X3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAg
ICB1bnNpZ25lZCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDk0NDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIzICsyNyw1MCBAQAogI2RlZmluZSBKSVRDb2RlX2gKIAogI2lmIEVOQUJMRShKSVQpCi0KICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXIuaCIKKyNlbmRpZgogCiBu
YW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRh
OwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKKyNlbmRpZgogICAgIAogICAgIGNsYXNzIEpJVENv
ZGUgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQ
dHI7CisjZWxzZQorICAgICAgICBKSVRDb2RlKCkgeyB9CisjZW5kaWYKICAgICBwdWJsaWM6CiAg
ICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQg
fTsKLQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCisg
ICAgICAgIHsKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICAgICAgcmV0
dXJuIEJhc2VsaW5lSklUOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisjZW5k
aWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJ
VCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqaXRUeXBlLCBqaXRUeXBl
ID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0gREZHSklUKTsKKyAgICAgICAgICAgIHJldHVy
biBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
SklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNTMsNyArODAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAg
ICAgICAgfQotCisgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yICEoKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpOwpAQCAtMTI0LDEwICsxNTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBDb2Rl
UmVmIG1fcmVmOwogICAgICAgICBKSVRUeXBlIG1faml0VHlwZTsKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQogICAgIH07CiAKIH07CiAKICNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIs
NiArNDUyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKElucwogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAog
ICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7CiAgICAgQVNTRVJUKHJlZ1Qx
ICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVy
ICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQ3Miw2ICs0NzQsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3JldF9vYmpl
Y3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRP
cHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgQVNTRVJU
KGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJu
VmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZy
YW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiArMTgxNiwzMiBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcF9jaGVja19oYXNfCiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgp
OwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX2xvb3ApCit7
CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJy
b3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsK
KyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1p
emVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKK30KKworREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9yZXQpCit7CisgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1l
LT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBp
bGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20g
cmV0IGZhaWxlZC5cbiIpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfaW5zdGFuY2VvZikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NDQ4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIzLDYgKzQyMyw4IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3Rp
X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lk
IEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX2xv
b3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6
ZV9mcm9tX3JldChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0
aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBK
SVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9qaXRDb21waWxlKFNUVUJfQVJHU19E
RUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjYgKzI4LDE2IEBACiAK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlBhcnNl
ci5oIgogI2luY2x1ZGUgIlVTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgotI2lu
Y2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBFeGVjdXRhYmxlQmFzZTo6c19pbmZvID0geyAiRXhlY3V0YWJsZSIsIDAs
IDAsIDAgfTsKIAotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMg
Ym9vbCB0cnlERkdDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvZGUmIGppdENvZGUpCi17Ci0jaWYgRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQot
ICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVy
IHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFyZ2V0cy4KLSAg
ICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0KLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIERGRzo6R3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIERGRzo6SklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZ2xvYmFsRGF0
YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFGbG93SklULmNvbXBpbGUoaml0Q29kZSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGVGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVX
aXRoQXJpdHlDaGVjaykKLXsKLSNpZiBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0gICAg
Ly8gRklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQgc3VwcG9ydGVkLCBkb24ndCBib3RoZXIgc2Nh
bm5pbmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBhbnkganVtcCB0YXJnZXRzLgotICAgIGlm
IChjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9OUykKLQotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgREZHOjpHcmFwaCBk
ZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKLSAg
ICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGNhbGxlZUFyZ3NFeGVjKQotICAgICAgICBkZmcucHJlZGljdEFy
Z3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMpOwotCi0gICAgREZHOjpKSVRDb21waWxlciBkYXRh
Rmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7Ci0gICAgZGF0YUZsb3dKSVQuY29t
cGlsZUZ1bmN0aW9uKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHRyeURGR0Nv
bXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpIHsgcmV0dXJuIGZhbHNlOyB9
Ci1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKLSAgICAKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiB7CiAjaWYgRU5BQkxF
KEpJVCkKQEAgLTE2Niw4ICsxMTYsMTggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4
ZWN1dGFibGUoRQogewogfQogCitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7
CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAg
ICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Cisg
ICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJK
SVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7
CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAK
LUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEV2YWxFeGVjdXRh
YmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwpAQCAtMTgzLDI2ICsxNDMsNDEgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1fZXZhbENv
ZGVCbG9jayk7Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxv
Y2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9k
ZS0+bG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0
b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNo
YWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2su
Z2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2
YWxDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpi
b3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9ldmFsQ29kZUJs
b2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3Vy
Y2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0Nv
ZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVy
YXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3Bl
Q2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9j
ay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVy
YXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29t
cGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkp
KSB7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay5jbGVhcigpOworICAgICAgICBtX2V2YWxDb2Rl
QmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9j
ay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEo
KTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBldmFsTm9kZS0+ZGVz
dHJveURhdGEoKTsKKyAgICBtX2V2YWxDb2RlQmxvY2stPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZl
KCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNl
SklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGUoZXhlYywg
bV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgaWYgKCFk
ZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICBp
ZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21waWxlZCA9
IERGRzo6dHJ5Q29tcGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZv
ckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpCisgICAgICAgICAgICBBU1NFUlQoIW1f
ZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSB8fCAhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5oYXNJbmNvbWluZ0NhbGxzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0aXZlIHBpZWNlIG9mIGNvZGUgY29tcGlsZWQg
d2l0aCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCwgc28gd2UgY2FuIHNpbGVu
dGx5IGZhaWwuCisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2
ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5n
bG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICB9CiAjaWYgIUVOQUJM
RShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBz
R2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kaXNjYXJkQnl0
ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBtX2V2YWxDb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgog
CkBAIC0yNjEsMTAgKzIzNiwxOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNr
U3ludGF4CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVj
dXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7
Ci0gICAgQVNTRVJUKCFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIEFTU0VSVChleGVjLT5nbG9i
YWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29k
ZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX3Byb2dyYW1Db2Rl
QmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVy
cm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0
VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCgh
IW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOworfQogCitKU09iamVjdCog
UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQorewog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0yNzcsMjUgKzI2MSw0
MCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5n
ZXQoKTsKICAgICAKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3Jh
bUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3Zp
ZGVyKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0
cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2Rl
LCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkp
KSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1D
b2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0
b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9wcm9ncmFtQ29kZUJs
b2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNl
KCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAm
Z2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksICEh
bV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9w
dGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9u
KSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAg
ICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJs
b2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2Rl
QmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ry
b3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCiAgICAgcHJvZ3Jh
bU5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5RGF0YUZy
b21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFs
RGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdD
b21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7
Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBm
YWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAg
ICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgbV9wcm9ncmFtQ29kZUJsb2Nr
LmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7Cisg
ICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgICAg
ICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21p
bmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcHJvZ3JhbUNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVC
bG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29k
ZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9wcm9ncmFt
Q29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJ
VDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2Nr
LmdldCgpKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAg
ICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAg
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMzQyLDcgKzM0MSwyOSBA
QCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogICAgIEJhc2U6OmNsZWFyQ29k
ZSgpOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbElu
dGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBF
eGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpCit7CisgICAgQVNTRVJU
KGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFt
X2NvZGVCbG9ja0ZvckNhbGwpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1f
Y29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkK
KyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JD
YWxsLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwor
ICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFt
aWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsK
KyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3Ig
PSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENv
ZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBlKCkpKTsK
KyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGVycm9y
OworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVy
bmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAg
SlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
c2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CkBAIC0zNTgsMTEgKzM3OSwxMiBAQCBKU09iamVj
dCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAg
IEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBh
ZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxP
YmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNl
KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9j
a0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkpKTsKKyAg
ICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ2Fs
bC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBh
ZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxP
YmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNl
LCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQo
KSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9j
b2RlQmxvY2tGb3JDYWxsLmdldCgpLCAhIW1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUo
KSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdl
bmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVy
YXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7
CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rp
b25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwog
ICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwog
ICAgIH0KQEAgLTM3MywxNyArMzk1LDMxIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFy
ZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2NvZGVC
bG9ja0ZvckNhbGwtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9v
bCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGVGdW5jdGlvbihleGVjLCBjYWxsZWVBcmdzRXhl
YywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAg
ICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENv
ZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlRnVu
Y3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9q
aXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAg
aWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5h
bHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJu
YXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAg
ICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5z
aGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNo
YWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLQorICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVk
Q29kZSgpKQogICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5kaXNjYXJkQnl0ZWNvZGUo
KTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5zZXRKSVRD
b2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CiAg
ICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY2FsbGVlQXJnc0V4ZWMpOwpAQCAtNDAzLDgg
KzQzOSwxMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAg
cmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogeworICAgIFVOVVNFRF9QQVJBTShqaXRUeXBl
KTsKKyAgICAKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKICAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25C
b2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9w
YXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNl
Tm9ybWFsLCAmZXhjZXB0aW9uKTsKQEAgLTQxOSwxMSArNDU3LDEyIEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJU
KCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qg
PSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9i
YWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRy
dWUpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5n
ZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklU
Q29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMs
IEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2Uo
KS5zdGFydE9mZnNldCgpLCB0cnVlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgISFt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9y
OjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxh
dGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsK
LSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2Nr
PihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAg
ICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0K
QEAgLTQzNCwxNCArNDczLDMwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJl
ZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOworICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAg
IG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xv
YmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCksICZtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsK
KyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSBjb25zdHJ1Y3Rv
cnMgd2l0aCBERkcuCisgICAgICAgIGlmIChkZmdDb21waWxlZCkgeworICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0Nh
bGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Cisg
ICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5z
aGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwg
Jm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgfQogI2lmICFF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpk
dW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk0NDg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDYsMTAgKzMwNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAg
ICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxv
Y2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVD
aGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMs
IHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKICAgICAgICAgRXZhbENvZGVC
bG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zNDQsNyArMzQ2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNl
Q29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5h
bChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lk
IHVubGlua0NhbGxzKCk7CiAKQEAgLTM2OSwxMSArMzcxLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1f
cHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5h
bChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxl
SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisKICAgICAgICAg
UHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTQwMyw3ICs0MDcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZs
YWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VD
b2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdW5saW5r
Q2FsbHMoKTsKIApAQCAtNDUwLDExICs0NTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxv
Y2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5h
bChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMpOworICAgICAgICAgICAgICAg
IGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2Fs
bGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICAgICAgICAgIHJldHVybiBl
cnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9y
Q2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4
ZWMgPSAwKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CkBAIC00NzEsMTEg
KzQ3NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9i
YWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJy
b3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKLSAgICAg
ICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29w
ZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qp
OwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKKyAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwpAQCAt
NTAxLDYgKzUwOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb21w
aWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgfQogICAgICAg
ICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVj
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcGlsZU9wdGltaXplZEZvciBzaG91
bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhIGNhbGxmcmFtZSBzZXQgdXAgdG8gY2FsbCB0aGlzIGZ1
bmN0aW9uLAorICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBtYWtlIHNwZWN1bGF0aXZlIG9w
dGltaXphdGlvbnMgYmFzZWQgb24gdGhlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIEFTU0VSVChl
eGVjLT5jYWxsZWUoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVy
aXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAgICAgICAgICAgIEFTU0VSVChhc0Z1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgIHJl
dHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29wZUNoYWluTm9kZSwgZXhlYyk7
CisgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAg
ICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQpAQCAtNTQ5LDggKzU3MSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSWRlbnRpZmll
ciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5j
dGlvblBhcmFtZXRlcnMqLCBib29sKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZv
cmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAKLSAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKTsKLSAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUpOwor
ICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVk
IG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjAsMTEgKzk2MCwyMyBAQAogI2RlZmlu
ZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9USUVSRURf
Q09NUElMQVRJT04pICYmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBFTkFCTEVfVElFUkVEX0NP
TVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3Ig
SlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCiAjaWYgIWRlZmluZWQo
RU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0KSAm
JiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9WQUxVRV9QUk9GSUxFUiAwCiAjZW5kaWYK
IAorI2lmICFkZWZpbmVkKEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTikKKyNpZiBFTkFCTEUo
VElFUkVEX0NPTVBJTEFUSU9OKSAmJiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisjZGVmaW5lIEVO
QUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiAxCisjZWxzZQorI2RlZmluZSBFTkFCTEVfRFlOQU1J
Q19PUFRJTUlaQVRJT04gMAorI2VuZGlmCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9W
RVJCT1NFX1ZBTFVFX1BST0ZJTEUpICYmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICNkZWZpbmUg
RU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSAwCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaAkocmV2aXNpb24gOTQ0ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwyNCArNDEsNjMgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGVudW0gU2Vu
dGluZWxUYWcgeyBTZW50aW5lbCB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gY2xhc3Mg
U2VudGluZWxMaW5rZWRMaXN0IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCYXNpY1Jh
d1NlbnRpbmVsTm9kZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBOb2RlKiBpdGVyYXRvcjsKKyAg
ICBCYXNpY1Jhd1NlbnRpbmVsTm9kZShTZW50aW5lbFRhZykKKyAgICAgICAgOiBtX25leHQoMCkK
KyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJhc2ljUmF3U2Vu
dGluZWxOb2RlKCkKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UHJldihCYXNpY1Jhd1NlbnRpbmVsTm9kZSog
cHJldikgeyBtX3ByZXYgPSBwcmV2OyB9CisgICAgdm9pZCBzZXROZXh0KEJhc2ljUmF3U2VudGlu
ZWxOb2RlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KKyAgICAKKyAgICBUKiBwcmV2KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJldik7IH0KKyAgICBUKiBuZXh0KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VCo+KG1fbmV4dCk7IH0KKyAgICAKKyAgICBib29sIGlzT25MaXN0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghIW1fcHJldiA9PSAhIW1fbmV4dCk7CisgICAgICAg
IHJldHVybiAhIW1fcHJldjsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmUoKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUqIG1fbmV4dDsKKyAgICBCYXNpY1Jh
d1NlbnRpbmVsTm9kZSogbV9wcmV2OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFJhd05vZGUgPSBUPiBjbGFzcyBTZW50aW5lbExpbmtlZExpc3QgeworcHVibGljOgorICAg
IHR5cGVkZWYgVCogaXRlcmF0b3I7CiAKICAgICBTZW50aW5lbExpbmtlZExpc3QoKTsKIAotICAg
IHZvaWQgcHVzaChOb2RlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlKE5vZGUqKTsKKyAgICB2
b2lkIHB1c2goVCopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZShUKik7CiAKICAgICBpdGVyYXRv
ciBiZWdpbigpOwogICAgIGl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRlOgotICAgIE5vZGUgbV9o
ZWFkU2VudGluZWw7Ci0gICAgTm9kZSBtX3RhaWxTZW50aW5lbDsKKyAgICBSYXdOb2RlIG1faGVh
ZFNlbnRpbmVsOworICAgIFJhd05vZGUgbV90YWlsU2VudGluZWw7CiB9OwogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6U2VudGluZWxM
aW5rZWRMaXN0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIEJhc2ljUmF3U2VudGluZWxO
b2RlPFQ+OjpyZW1vdmUoKQoreworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxULCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxUPiA+OjpyZW1vdmUoc3RhdGljX2Nhc3Q8VCo+KHRoaXMpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSBTZW50aW5lbExpbmtl
ZExpc3Q8VCwgUmF3Tm9kZT46OlNlbnRpbmVsTGlua2VkTGlzdCgpCiAgICAgOiBtX2hlYWRTZW50
aW5lbChTZW50aW5lbCkKICAgICAsIG1fdGFpbFNlbnRpbmVsKFNlbnRpbmVsKQogewpAQCAtNjks
MjEgKzEwOCwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsCiAg
ICAgbV90YWlsU2VudGluZWwuc2V0TmV4dCgwKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5v
ZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46Oml0ZXJhdG9yIFNl
bnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6YmVnaW4oKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3
Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6YmVnaW4oKQog
ewotICAgIHJldHVybiBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQqPihtX2hlYWRTZW50aW5lbC5uZXh0KCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6aXRlcmF0b3Ig
U2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjplbmQoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3
Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6ZW5kKCkKIHsK
LSAgICByZXR1cm4gJm1fdGFpbFNlbnRpbmVsOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4o
Jm1fdGFpbFNlbnRpbmVsKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB2
b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cHVzaChOb2RlKiBub2RlKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2Vk
TGlzdDxULCBSYXdOb2RlPjo6cHVzaChUKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKLSAg
ICBOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOwotICAgIE5vZGUqIG5leHQgPSBtX2hlYWRT
ZW50aW5lbC5uZXh0KCk7CisgICAgQVNTRVJUKCFub2RlLT5wcmV2KCkpOworICAgIEFTU0VSVCgh
bm9kZS0+bmV4dCgpKTsKKyAgICAKKyAgICBSYXdOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVs
OworICAgIFJhd05vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CiAKICAgICBub2Rl
LT5zZXRQcmV2KHByZXYpOwogICAgIG5vZGUtPnNldE5leHQobmV4dCk7CkBAIC05MiwxNyArMTM0
LDI1IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgdm9pZCBTZW4KICAgICBuZXh0
LT5zZXRQcmV2KG5vZGUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHZv
aWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUoTm9kZSogbm9kZSkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUgdm9pZCBTZW50aW5lbExpbmtl
ZExpc3Q8VCwgUmF3Tm9kZT46OnJlbW92ZShUKiBub2RlKQogewotICAgIE5vZGUqIHByZXYgPSBu
b2RlLT5wcmV2KCk7Ci0gICAgTm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKKyAgICBBU1NFUlQo
bm9kZSk7CisgICAgQVNTRVJUKCEhbm9kZS0+cHJldigpKTsKKyAgICBBU1NFUlQoISFub2RlLT5u
ZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7CisgICAgUmF3
Tm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKIAogICAgIHByZXYtPnNldE5leHQobmV4dCk7CiAg
ICAgbmV4dC0+c2V0UHJldihwcmV2KTsKKyAgICAKKyAgICBub2RlLT5zZXRQcmV2KDApOworICAg
IG5vZGUtPnNldE5leHQoMCk7CiB9CiAKIH0KIAordXNpbmcgV1RGOjpCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTsKIHVzaW5nIFdURjo6U2VudGluZWxMaW5rZWRMaXN0OwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106256</attachid>
            <date>2011-09-03 01:21:30 -0700</date>
            <delta_ts>2011-09-03 02:01:17 -0700</delta_ts>
            <desc>the patch - removed spurious debug nonsense from v8-crypto</desc>
            <filename>dynopt_patch_6.diff</filename>
            <type>text/plain</type>
            <size>119937</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc3IEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
dGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAor
ICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0
b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2Rl
QmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNv
dW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3Vl
cyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bwor
ICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAg
ICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMs
IGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0
IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJz
dHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBz
dWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9y
bWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0
byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBz
dGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAg
Tm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlz
IGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFp
bGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYg
KHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hBZGQzMik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6On5Db2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpjbGVhckV2YWxDYWNoZSk6CisgICAgICAgIChKU0M6OnJlcGxhY2VF
eGlzdGluZ0VudHJpZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFs
dGVybmF0aXZlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFjZW1lbnQp
OgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OlByb2dy
YW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJs
b2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6
OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChK
U0M6OlByb2dyYW1Db2RlQmxvY2s6OlByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpF
dmFsQ29kZUJsb2NrOjpFdmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2Rl
QmxvY2s6OkZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
VmFsdWVQcm9maWxlOjpjb21wdXRlU3RhdGlzdGljcyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpkeW5hbWljYWxseVByZWRpY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpwYXJzZSk6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGUpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OnRyeUNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlD
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0
QXJndW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0
R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmlzSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzRG91
YmxlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSlNDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmlzSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omlz
SW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzRG91Ymxl
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSlNDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZJbnQzMkNvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVPZkRvdWJsZUNvbnN0
YW50KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OmlzQ2Vs
bFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OmlzTnVtYmVyUHJlZGljdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6cHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZH
OjptZXJnZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6Om1ha2VQcmVkaWN0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aXNJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojppc0RvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YWx1ZU9mSW50
MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkRvdWJsZUNvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwcmVkaWN0KToKKyAgICAgICAgKiBkZmcv
REZHUHJvcGFnYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjpQcm9wYWdhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UHJlZGljdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9w
YWdhdG9yOjpwcm9wYWdhdGVGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
Ojpwcm9wYWdhdGVCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAg
ICAgICAgKiBkZmcvREZHUHJvcGFnYXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6ZGZnTGlua0Zvcik6CisgICAgICAgICogaGVhcC9IYW5kbGVIZWFwLmg6CisgICAgICAg
IChKU0M6OkhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFRpbWVvdXRDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmtGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIGpp
dC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6SklUQ29kZSk6CisgICAgICAg
IChKU0M6OkpJVENvZGU6OmJvdHRvbVRpZXJKSVQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjp0
b3BUaWVySklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6bmV4dFRpZXJKSVQpOgorICAgICAg
ICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6
CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChK
U0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50
ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
Ojpjb21waWxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9y
Q2FsbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0
cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXpl
ZEZvcik6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogd3RmL1NlbnRpbmVs
TGlua2VkTGlzdC5oOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6QmFzaWNS
YXdTZW50aW5lbE5vZGUpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0
UHJldik6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpzZXROZXh0KToKKyAg
ICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnByZXYpOgorICAgICAgICAoV1RGOjpC
YXNpY1Jhd1NlbnRpbmVsTm9kZTo6bmV4dCk6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGlu
ZWxOb2RlOjppc09uTGlzdCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToKKyAgICAgICAgKFdU
Rjo6OjpTZW50aW5lbExpbmtlZExpc3QpOgorICAgICAgICAoV1RGOjo6OmJlZ2luKToKKyAgICAg
ICAgKFdURjo6OjplbmQpOgorICAgICAgICAoV1RGOjo6OnB1c2gpOgorCiAyMDExLTA5LTAzICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHZhcmlhYmxlIHBy
ZWRpY3Rpb25zIG9ubHkgd29yayBmb3IgbG9jYWwgdmFyaWFibGVzLCBub3QgdGVtcG9yYXJpZXMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk0NDg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC02LDYgKzYsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYXNzZW1ibGVyIgogICAgICIke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYnl0ZWNvZGUiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9ieXRlY29tcGlsZXIi
CisgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9kZmciCiAgICAgIiR7SkFWQVNDUklQVENPUkVf
RElSfS9oZWFwIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGVidWdnZXIiCiAgICAgIiR7
SkFWQVNDUklQVENPUkVfRElSfS9pbnRlcnByZXRlciIKQEAgLTU0LDcgKzU1LDcgQEAgU0VUKEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKICAgICBkZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwCi0KKyAgICAKICAgICBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCiAgICAgaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCiAgICAgaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR1BSSW5mby5oIFwKQEAgLTExNiw2ICsxMTgsOCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
blNwZWN1bGF0aXZlSklULmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU1MCw2ICsxNTUwLDE0IEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQk8L0ZpbHRlcj4KKyAgICAgICAgICAgICAgICA8RmlsdGVyCisgICAgICAgICAgICAg
ICAgICAgICAgICBOYW1lPSJkZmciCisgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXGRmZ1xERkdEcml2ZXIuaCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAg
ICAgICAgIDwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJyIgogCQkJPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBACiAJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYw
MyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJp
ZXJTdXBwb3J0LmNwcCAqLzsgfTsKIAkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUxNjE0MDUxMUI1
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmNwcCAqLzsgfTsKKwkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3Bh
Z2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi87IH07CisJ
CTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNC
IC8qIERGR0RyaXZlci5jcHAgKi87IH07CisJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBE
RkdQcm9wYWdhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmggKi87IH07
CisJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9T
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZh
bHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICov
OyB9OwpAQCAtMzc1LDcgKzM3OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBM
YWJlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5
QTA3MjcwRUQxQ0U2OTAwRjFGNjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2OUEwNzJCMEVEMUNF
NjkwMEYxRjY4MSAvKiBSZWdpc3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5o
ICovOyB9OwogCQk5NjlBMDcyQzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyOTBF
RDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0JCTk2OUEwNzk2MEVE
MUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9j
ay5jcHAgKi87IH07CisJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAw
RUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVS
X0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5QTA3OTcwRUQxRDNB
RTAwRjFGNjgxIC8qIENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTY5QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEwNzk4MEVEMUQzQUUw
MEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNo
ZS5oICovOyB9OwogCQk5NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkzMEVE
MUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5LDYgKzc4MywxMCBA
QAogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
VGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTE0
MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZH
RHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjIxNDExNUQw
RTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0aW9uLmNw
cDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wYWdhdGlvbi5oOyBwYXRoID0gZGZn
L0RGR1Byb3BhZ2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2
MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFz
ZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEwIEBACiAJ
CTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQ
cm9wYWdhdGlvbi5oICovLAorCQkJCTBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9w
YWdhdGlvbi5jcHAgKi8sCisJCQkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZl
ci5oICovLAorCQkJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICov
LAogCQkJCTg2RUNBNEYwMTMyRUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCAqLywK
IAkJCQk4NkVDOURCNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwICov
LAogCQkJCTg2RUM5REI1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICov
LApAQCAtMjYxNyw2ICsyNjI5LDggQEAKIAkJCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyog
Zml4ZWQtZHRvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBE
IC8qIHN0cnRvZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBE
IC8qIHV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzQzgyNzE0MTE1RDRGMDBGRDgxQ0Ig
LyogREZHUHJvcGFnYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI4MTQxMTVENEYw
MEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0Iy
MjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIw
RTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAg
LTMwMzMsNiArMzA0Nyw4IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQzQzgyNTE0
MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1
cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEs
MTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25k
aXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAg
eworI2lmIENQVShYODZfNjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRy
KSwgWDg2UmVnaXN0ZXJzOjpyMTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjpyMTEpKTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1f
dmFsdWUsIGRlc3QubV9wdHIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFk
ZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQog
ICAgIHsKICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDAxLDkgKzE0MDEsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICNl
bmRpZgogfQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCitDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVU
eXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1i
b2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2Nr
PiBhbHRlcm5hdGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9n
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291bnRlcigt
MTAwMCkgLy8gdHJpZ2dlciBvcHRpbWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAs
IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVt
UGFyYW1ldGVycygwKQpAQCAtMTQyMiw2ICsxNDIzLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
U2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCiAgICAg
LCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bVRh
YikKKyAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCiB7CiAgICAgQVNTRVJUKG1fc291
cmNlKTsKIApAQCAtMTQ0MSwxNSArMTQ0MywxOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQog
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwgaSArIDEpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogIiwg
cHJvZmlsZS0+Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAg
ICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9
ICV1LCBhcnJheSA9ICV1XG4iLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPm51bWJlck9mU2Ft
cGxlcygpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZJbnQzMigpLAot
ICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZEb3VibGUoKSwKLSAgICAgICAg
ICAgICAgICBwcm9maWxlLT5wcm9iYWJpbGl0eU9mQ2VsbCgpLAotICAgICAgICAgICAgICAgIHBy
b2ZpbGUtPnByb2JhYmlsaXR5T2ZBcnJheSgpKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRl
cnIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQogI2VuZGlmCisgICAg
CisgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0aGVyZSBhcmUg
aW5jb21pbmcgY2FsbHMuIEJ1dAorICAgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGR1cmluZyBoZWFw
IGRlc3RydWN0aW9uLCB0aGVuIHRoZXJlIG1heSBzdGlsbCBiZQorICAgIC8vIGluY29taW5nIGNh
bGxzLCB3aGljaCBpcyBoYXJtbGVzcy4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgb3VyIG91dGdv
aW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCisgICAgLy8g
bV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2YgdGhl
IH5DYWxsTGlua0luZm8KKyAgICAvLyBkZXN0cnVjdG9ycy4KIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgaSA9IDA7
IGkgPCBzaXplOyArK2kpCkBAIC0xNTE5LDYgKzE1MjQsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiB7CiAgICAgYm9vbCBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9
IGZhbHNlOwogICAgIAorICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJu
YXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX2ds
b2JhbE9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKICAg
ICBpZiAobV9yYXJlRGF0YSkgewpAQCAtMTc4OSw4ICsxNzk2LDMwIEBAIHZvaWQgQ29kZUJsb2Nr
OjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmEKIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQordm9p
ZCBDYWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJlcGF0Y2hC
dWZmZXImIHJlcGF0Y2hCdWZmZXIpCit7CisgICAgQVNTRVJUKGlzTGlua2VkKCkpOworICAgIAor
ICAgIGlmIChpc0RGRykgeworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbCA/
IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisjZWxzZQorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRp
b24pLCBpc0NhbGw/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDog
Z2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgaGFz
U2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKKyAgICBjYWxsZWUuY2xlYXIoKTsKKworICAgIC8v
IEl0IHdpbGwgYmUgb24gYSBsaXN0IGlmIHRoZSBjYWxsZWUgaGFzIGEgY29kZSBibG9jay4KKyAg
ICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgcmVtb3ZlKCk7Cit9CisKIHZvaWQgQ29kZUJsb2Nr
Ojp1bmxpbmtDYWxscygpCiB7CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9h
bHRlcm5hdGl2ZS0+dW5saW5rQ2FsbHMoKTsKICAgICBpZiAoIShtX2NhbGxMaW5rSW5mb3Muc2l6
ZSgpIHx8IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKCFtX2dsb2JhbERhdGEtPmNhblVzZUpJVCgpKQpAQCAtMTc5OSwyNCArMTgyOCwxMDEg
QEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoIW1fY2FsbExp
bmtJbmZvc1tpXS5pc0xpbmtlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewotI2lmIEVOQUJM
RShERkdfSklUKQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9u
Q2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0lu
Zm9zW2ldLmlzQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVj
dCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRp
b25OZWFyQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxs
TGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxD
YWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExp
bmsoKSk7Ci0gICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKKyAgICAgICAgbV9j
YWxsTGlua0luZm9zW2ldLnVubGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKICAg
ICB9CiB9CisKK3ZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKK3sKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CisgICAgd2hpbGUgKG1faW5jb21pbmdD
YWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWlu
Z0NhbGxzLmJlZ2luKCktPnVubGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKK30K
ICNlbmRpZgogCiB2b2lkIENvZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUoKQogeworICAgIGlmICgh
IW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPmNsZWFyRXZhbENhY2hlKCk7
CiAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICByZXR1cm47CiAgICAgbV9yYXJlRGF0YS0+
bV9ldmFsQ29kZUNhY2hlLmNsZWFyKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citpbmxp
bmUgdm9pZCByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKFZlY3RvcjxUPiYgdGFyZ2V0LCBWZWN0b3I8
VD4mIHNvdXJjZSkKK3sKKyAgICBBU1NFUlQodGFyZ2V0LnNpemUoKSA8PSBzb3VyY2Uuc2l6ZSgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldC5zaXplKCk7ICsraSkKKyAgICAg
ICAgdGFyZ2V0W2ldID0gc291cmNlW2ldOworfQorCit2b2lkIENvZGVCbG9jazo6Y29weURhdGFG
cm9tQWx0ZXJuYXRpdmUoKQoreworICAgIGlmICghbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9jb25zdGFudFJlZ2lzdGVy
cywgbV9hbHRlcm5hdGl2ZS0+bV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgcmVwbGFjZUV4aXN0
aW5nRW50cmllcyhtX2Z1bmN0aW9uRGVjbHMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25EZWNs
cyk7CisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0aW9uRXhwcnMsIG1fYWx0ZXJu
YXRpdmUtPm1fZnVuY3Rpb25FeHBycyk7Cit9CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSLiBJ
ZiBjb21waWxlT3B0aW1pemVkKCkgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJlIG90aGVyIHRoYW4g
dGhlCisvLyBlcGlsb2d1ZSwgZG8gT1NSIGZyb20gdGhlIG9sZCBjb2RlIGJsb2NrIHRvIHRoZSBu
ZXcgb25lLgorCisvLyBGSVhNRTogQWZ0ZXIgZG9pbmcgc3VjY2Vzc2Z1bCBvcHRpbWl6ZWQgY29t
cGlsYXRpb24sIHJlc2V0IHRoZSBwcm9maWxpbmcgY291bnRlciB0byAtMSwgc28KKy8vIHRoYXQg
dGhlIG5leHQgZXhlY3V0aW9uIG9mIHRoZSBvbGQgY29kZSBibG9jayB3aWxsIGp1bXAgc3RyYWln
aHQgaW50byBjb21waWxlT3B0aW1pemVkKCkKKy8vIGFuZCBwZXJmb3JtIE9TUi4KKworLy8gRklY
TUU6IEVuc3VyZSB0aGF0IGEgY2FsbCB0byBjb21waWxlT3B0aW1pemVkKCkganVzdCBkb2VzIE9T
UiAoYW5kIHJlc2V0cyB0aGUgY291bnRlciB0byAtMSkKKy8vIGlmIHRoZSBjb2RlIGhhZCBhbHJl
YWR5IGJlZW4gY29tcGlsZWQuCisKK0NvZGVCbG9jayogUHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFj
ZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayog
RXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8
RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7
Cit9CisKK0NvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAg
ICByZXR1cm4gJnN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0
cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KKworSlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUpCit7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2Rl
OjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNv
IG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAg
IGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSk7Cisg
ICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
K3sKKyAgICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRU
aWVySklUKGdldEpJVFR5cGUoKSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBz
dXJlIHdlIGRvbid0IGhpdCB0aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9w
dGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5jb21waWxlT3B0aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICByZXR1cm4g
ZXJyb3I7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAg
ICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklU
KGdldEpJVFR5cGUoKSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdl
IGRvbid0IGhpdCB0aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXpl
QW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBl
cnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVj
dG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gZXJyb3I7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVs
TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShKSVQp
CkBAIC05OCwxMiArOTksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJM
RShKSVQpCi0gICAgc3RydWN0IENhbGxMaW5rSW5mbyB7CisgICAgc3RydWN0IENhbGxMaW5rSW5m
bzogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBD
YWxsTGlua0luZm8oKQogICAgICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkK
ICAgICAgICAgICAgICwgaXNDYWxsKGZhbHNlKQorICAgICAgICAgICAgLCBpc0RGRyhmYWxzZSkK
ICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+Q2FsbExpbmtJbmZvKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgICAgICAgICAg
cmVtb3ZlKCk7CisgICAgICAgIH0KIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0
dXJuTG9jYXRpb247IC8vIGl0J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBKSVQsIG9yIGEgbm9y
bWFsIGNhbGwgaW4gREZHCiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRo
QmVnaW47CkBAIC0xMTEsMTMgKzExOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklU
V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKICAgICAgICAgYm9vbCBoYXNTZWVuU2hv
dWxkUmVwYXRjaCA6IDE7CiAgICAgICAgIGJvb2wgaXNDYWxsIDogMTsKKyAgICAgICAgYm9vbCBp
c0RGRyA6IDE7CiAKICAgICAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQot
ICAgICAgICB2b2lkIHVubGluaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhhc1NlZW5TaG91
bGRSZXBhdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAg
fQorICAgICAgICB2b2lkIHVubGluayhKU0dsb2JhbERhdGEmLCBSZXBhdGNoQnVmZmVyJik7CiAK
ICAgICAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgICAgIHsKQEAgLTIxMCwxMyArMjE1LDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVj
dCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgQ29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xv
YmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9m
ZnNldCwgU3ltYm9sVGFibGUqLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0
PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgSGVhcCogbV9oZWFwOwogCiAgICAgcHVibGljOgog
ICAgICAgICB2aXJ0dWFsIH5Db2RlQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9j
ayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9CisgICAgICAg
IFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2Fs
dGVybmF0aXZlLnJlbGVhc2UoKTsgfQogCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xv
dFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
Jik7CkBAIC0yNzksNiArMjg3LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCB1bmxpbmtDYWxscygpOworICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNJbmNv
bWluZ0NhbGxzKCkgeyByZXR1cm4gbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWlu
Z0NhbGxzLmVuZCgpOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwo
Q2FsbExpbmtJbmZvKiBpbmNvbWluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmNvbWlu
Z0NhbGxzLnB1c2goaW5jb21pbmcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IHVubGlua0luY29taW5nQ2FsbHMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVS
KQpAQCAtMzAwLDggKzMxNywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKEpJVCkKLSAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25z
dHJ1Y3RvciA/IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0
KCkgOiBvd25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQorICAg
ICAgICB2b2lkIHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgeworICAgICAgICAgICAgbV9qaXRD
b2RlID0gY29kZTsKKyAgICAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdp
dGhBcml0eUNoZWNrOworICAgICAgICB9CisgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7
IHJldHVybiBtX2ppdENvZGU7IH0KKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBl
KCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlUG9v
bCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBv
b2woKTsgfQorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayog
cmVwbGFjZW1lbnQoKSA9IDA7CisjZWxzZQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJ
VFR5cGUoKSB7IHJldHVybiBKSVRDb2RlOjpCYXNlbGluZUpJVDsgfQogI2VuZGlmCiAKICAgICAg
ICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KQEAgLTM5OCw2ICs0MjUsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFy
Y2g8VmFsdWVQcm9maWxlLCBpbnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3Zh
bHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICAgICAgfQorICAgICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGlu
dCBhcmd1bWVudEluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBhcmd1
bWVudEluZGV4IC0gMTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5k
ZXgpID49IG1fdmFsdWVQcm9maWxlcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IHZhbHVlUHJvZmlsZShhcmd1bWVu
dEluZGV4IC0gMSk7CisgICAgICAgICAgICBpZiAocmVzdWx0LT5ieXRlY29kZU9mZnNldCAhPSAt
MSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbmZv
Q291bnQoKSBjb25zdApAQCAtNTM1LDYgKzU3MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgRXZhbENvZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vz
c2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKICAgICAgICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21B
bHRlcm5hdGl2ZSgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWluKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMy
X3QgbV9leGVjdXRlQ291bnRlcjsKIAogICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1h
aW5pbmcgbWVtYmVycyBwcml2YXRlLgogCkBAIC01OTQsNiArNjQ1LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFZlY3RvcjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5m
b3M7CiAgICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAg
ICAgVmVjdG9yPE1ldGhvZENhbGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9zOworICAg
ICAgICBKSVRDb2RlIG1faml0Q29kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1f
aml0Q29kZVdpdGhBcml0eUNoZWNrOworICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExp
bmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+ID4gbV9pbmNvbWluZ0Nh
bGxzOwogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC02MTAsNiArNjY0
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFi
bGU7CiAKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsgLy8gRklYTUUg
bWFrZSB0aGlzIGRvIHNvbWV0aGluZworCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAg
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6CkBAIC02NDYs
OSArNzAyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gcmVzcG9uc2libGUgZm9yIG1hcmtp
bmcgaXQuCiAKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWdu
ZWQgc291cmNlT2Zmc2V0KQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAm
bV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEds
b2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3du
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25l
ckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3Vy
Y2VPZmZzZXQsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlLCBhbHRlcm5hdGl2ZSkKICAg
ICAgICAgewogICAgICAgICB9CiAKQEAgLTY1OCwxNiArNzE0LDIyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0g
ICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBn
bG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAgICBQcm9ncmFtQ29kZUJsb2Nr
KFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAg
ICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFs
T2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAg
ICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAg
dmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWlu
Tm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRp
ZgogICAgIH07CiAKICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVC
bG9jayB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgpCi0g
ICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBn
bG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAgICBFdmFsQ29kZUJsb2NrKEV2
YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNj
b3BlRGVwdGgsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAg
IDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVj
dCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQogICAgICAgICAgICAgLCBtX2Jhc2VT
Y29wZURlcHRoKGJhc2VTY29wZURlcHRoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTY4MSw2
ICs3NDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQobV92YXJpYWJs
ZXMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsK
ICAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsK
KyNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7CkBA
IC02OTMsMTQgKzc2MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYXMgd2UgbmVl
ZCB0byBpbml0aWFsaXNlIHRoZSBDb2RlQmxvY2sgYmVmb3JlIHdlIGNvdWxkIGluaXRpYWxpc2Ug
YW55IFJlZlB0ciB0byBob2xkIHRoZSBzaGFyZWQKICAgICAgICAgLy8gc3ltYm9sIHRhYmxlLCBz
byB3ZSBqdXN0IHBhc3MgYXMgYSByYXcgcG9pbnRlciB3aXRoIGEgcmVmIGNvdW50IG9mIDEuICBX
ZSB0aGVuIG1hbnVhbGx5IGRlcmVmCiAgICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9yLgotICAg
ICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIGJvb2wgaXNDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9m
ZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3Rv
cikKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRl
cm5hdGl2ZSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5
cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3lt
Ym9sVGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvciwgYWx0ZXJuYXRpdmUp
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2soKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzaGFyZWRTeW1ib2xUYWJsZSgpLT5kZXJlZigpOwogICAgICAg
ICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlm
CiAgICAgfTsKIAogICAgIGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGUgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBjb3VudHMgKiBj
ZXJ0YWludHkgLyBudW1iZXJPZlNhbXBsZXM7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICB1
bnNpZ25lZCBudW1iZXJPZkludDMycygpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOwpAQCAtMTQyLDYgKzE0Miw4NiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAg
ICB7CiAgICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJheXMoKSwg
bnVtYmVyT2ZTYW1wbGVzKCkpOwogICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1
bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAg
ICAgInNhbXBsZXMgPSAldSwgaW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJy
YXkgPSAldSIsCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCisgICAgICAgICAg
ICAgICAgbnVtYmVyT2ZJbnQzMnMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRvdWJsZXMo
KSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkNlbGxzKCksCisgICAgICAgICAgICAgICAgbnVt
YmVyT2ZBcnJheXMoKSk7CisgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICghIWJ1Y2tldHNbaV0gfHwgISF3ZWFrQnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAg
IGlmIChmaXJzdCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIjogIik7Cisg
ICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSkKKyAgICAgICAgICAg
ICAgICBmcHJpbnRmKG91dCwgIiVzIiwgSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pLmRlc2Ny
aXB0aW9uKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0c1tp
XSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkRlYWRDZWxsIik7CisgICAgICAgIH0K
KyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CisgICAgICAgIHVu
c2lnbmVkIHNhbXBsZXM7CisgICAgICAgIHVuc2lnbmVkIGludDMyczsKKyAgICAgICAgdW5zaWdu
ZWQgZG91YmxlczsKKyAgICAgICAgdW5zaWduZWQgY2VsbHM7CisgICAgICAgIHVuc2lnbmVkIGFy
cmF5czsKKyAgICB9OworCisgICAgLy8gT3B0aW1pemVkIG1ldGhvZCBmb3IgZ2V0dGluZyBhbGwg
Y291bnRzIGF0IG9uY2UuCisgICAgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0CisgICAgeworICAgICAg
ICB1bnNpZ25lZCBzYW1wbGVzID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50MzJzICA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIGRvdWJsZXMgPSAwOworICAgICAgICB1bnNpZ25lZCBjZWxscyAgID0g
MDsKKyAgICAgICAgdW5zaWduZWQgYXJyYXlzICA9IDA7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICghYnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tl
dCA9IHdlYWtCdWNrZXRzW2ldOworICAgICAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgc2FtcGxlcysrOworICAgICAgICAgICAgICAgICAgICBjZWxs
cysrOworICAgICAgICAgICAgICAgICAgICBpZiAod2Vha0J1Y2tldC5nZXRDbGFzc0luZm8oKSA9
PSAmSlNBcnJheTo6c19pbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzKys7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzYW1wbGVzKys7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoYnVja2V0c1tpXSk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAg
ICAgICAgICAgIGludDMycysrOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUo
KSkKKyAgICAgICAgICAgICAgICBkb3VibGVzKys7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1
ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIGNlbGxzKys7CisgICAgICAgICAgICAgICAg
aWYgKGlzSlNBcnJheSgmZ2xvYmFsRGF0YSwgdmFsdWUuYXNDZWxsKCkpKQorICAgICAgICAgICAg
ICAgICAgICBhcnJheXMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGlzdGljcy5zYW1wbGVzID0gc2FtcGxlczsKKyAgICAgICAgc3RhdGlzdGljcy5p
bnQzMnMgID0gaW50MzJzOworICAgICAgICBzdGF0aXN0aWNzLmRvdWJsZXMgPSBkb3VibGVzOwor
ICAgICAgICBzdGF0aXN0aWNzLmNlbGxzICAgPSBjZWxsczsKKyAgICAgICAgc3RhdGlzdGljcy5h
cnJheXMgID0gYXJyYXlzOworICAgIH0KICAgICAKICAgICBpbnQgYnl0ZWNvZGVPZmZzZXQ7IC8v
IC0xIGZvciBwcm9sb2d1ZQogICAgIEVuY29kZWRKU1ZhbHVlIGJ1Y2tldHNbbnVtYmVyT2ZCdWNr
ZXRzXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2Vy
dmVMYXN0VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgp
OwogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUq
IHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQpCiAgICAgOiBt
X3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIo
KSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmpl
Y3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5m
byhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKQEAg
LTIyOCw2ICsyMjgsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJv
CiAgICAgCiAgICAgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9IDE7IC8vIEFsbG9jYXRl
IHNwYWNlIGZvciAidGhpcyIKICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0gY29k
ZUJsb2NrLT5tX251bVZhcnM7CisgICAgCisgICAgaWYgKGNvbXBpbGF0aW9uS2luZCA9PSBPcHRp
bWl6aW5nQ29tcGlsYXRpb24pCisgICAgICAgIHJldHVybjsKIAogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yNTgsNyArMjYx
LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIH0KIH0K
IAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUq
IGZ1bmN0aW9uQm9keSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhz
Y29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQ
cm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1Byb2ZpbGluZygp
KQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xvYmFsT2Jq
ZWN0LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkBAIC00MTksNyArNDIyLDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgIH0KIH0KIAotQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9j
ayogY29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxO
b2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCiAg
ICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVi
dWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9i
YWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291
cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8o
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Miw5ICs5MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgc2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRD
b2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKCk7CiAKLSAgICAg
ICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJv
bFRhYmxlKiwgUHJvZ3JhbUNvZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihG
dW5jdGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9j
ayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2Rl
KiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKik7CisgICAgICAgIGVudW0gQ29tcGlsYXRp
b25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0aW9uIH07CisgICAg
ICAgIAorICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5O
b2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsK
KyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5O
b2RlKiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAgICAg
ICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFi
bGUqLCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKIAogICAgICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KICAgICAg
ICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVy
biAqbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ0ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksOSArNDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNvbXBpbGUgdGhlIGRhdGFmbG93IGdyYXBoIGZy
b20gYSBDb2RlQmxvY2suCiBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiBwdWJsaWM6Ci0gICAgQnl0
ZUNvZGVQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgR3JhcGgmIGdyYXBoKQorICAgIEJ5dGVDb2RlUGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgR3Jh
cGgmIGdyYXBoKQogICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAs
IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmls
ZWRCbG9jaykKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3VycmVudElu
ZGV4KDApCiAgICAgICAgICwgbV9wYXJzZUZhaWxlZChmYWxzZSkKQEAgLTY1LDYgKzY2LDkgQEAg
cHVibGljOgogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBh
c3NlZFZhckFyZ3MoMCkKICAgICB7CisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQor
ICAgICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8v
IFBhcnNlIGEgZnVsbCBDb2RlQmxvY2sgb2YgYnl0ZWNvZGUuCkBAIC00MjEsOCArNDI1LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CiAgICAg
ICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBPcEluZm8o
MCksIE9wSW5mbyhQcmVkaWN0Tm9uZSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1
Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAg
ICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29k
ZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQorICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9w
Y29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7
CiAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAg
ICAgICAgICAgIGR5bmFtaWNhbGx5UHJlZGljdChjYWxsLCBtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbCkpOworICAgICAgICB9CiAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNs
b3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OwogICAgICAgICByZXR1cm4gY2FsbDsKQEAgLTQ2Miw5
ICs0NjgsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoIW1f
cmV1c2FibGVOb2RlU3RhY2suaXNFbXB0eSgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBkeW5h
bWljYWxseVByZWRpY3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKKyAgICB7CisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPSBtX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQocHJvZmlsZSk7CisjaWYg
REZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIHByZWRpY3Rpb24gWyV1
LCAldV06ICIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHByb2ZpbGUtPmR1
bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIG1fZ3Jh
cGhbbm9kZUluZGV4XS5wcmVkaWN0KG1ha2VQcmVkaWN0aW9uKCptX2dsb2JhbERhdGEsICpwcm9m
aWxlKSwgRHluYW1pY1ByZWRpY3Rpb24pOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5v
ZGVJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNlbmRpZgor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGR5bmFtaWNhbGx5UHJlZGljdChOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIHsKKyAgICAgICAgZHluYW1pY2FsbHlQcmVkaWN0KG5vZGVJbmRleCwgbV9jdXJy
ZW50SW5kZXgpOworICAgIH0KIAogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7
CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKICAgICAvLyBUaGUgY3VycmVudCBibG9jayBiZWluZyBn
ZW5lcmF0ZWQuCkBAIC01NjMsNyArNTkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJy
ZW50SW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsKICAgICAgICAg
fQotCisgICAgICAgIAogICAgICAgICAvLyBTd2l0Y2ggb24gdGhlIGN1cnJlbnQgYnl0ZWNvZGUg
b3Bjb2RlLgogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zQmVnaW4gKyBtX2N1cnJlbnRJbmRleDsKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKQEAgLTg4Myw2
ICs5MTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAg
ICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5m
bygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3Vw
R2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CisgICAgICAgICAgICBkeW5hbWljYWxseVBy
ZWRpY3QoZ2V0QnlWYWwpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRCeVZhbChnZXRC
eVZhbCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwpAQCAtOTEy
LDYgKzk0Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRvR3JhcGgo
R2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2Up
OwogICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0TWV0aG9k
KTsKKyAgICAgICAgICAgIGR5bmFtaWNhbGx5UHJlZGljdChnZXRNZXRob2QpOwogICAgICAgICAg
ICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2sp
ICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwpAQCAtOTI1LDYgKzk1Niw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhpZGVu
dGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7CisgICAgICAgICAgICBkeW5h
bWljYWxseVByZWRpY3QoZ2V0QnlJZCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5
SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV9pZCk7CkBA
IC0xMzUwLDcgKzEzODIsNyBAQCBib29sIHBhcnNlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXRh
KiBnCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAgICAgcmV0dXJuIGZhbHNlOwogI2Vs
c2UKLSAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBncmFw
aCkucGFyc2UoKTsKKyAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwgY29kZUJs
b2NrLCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIGdyYXBoKS5wYXJzZSgpOwogI2VuZGlmCiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgor
I2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRpb24uaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIENvbXBpbGVNb2RlIHsg
Q29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKK2lubGluZSBib29sIGNvbXBpbGUoQ29t
cGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVB
cmdzRXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgR3JhcGggZGZnKGNvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgaWYgKCFw
YXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQorICAgICAgICBk
ZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMsIGNvZGVCbG9jayk7CisgICAg
CisgICAgcHJvcGFnYXRlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBK
SVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CisgICAg
aWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikgeworICAgICAgICBBU1NFUlQoaml0
Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklULmNvbXBp
bGVGdW5jdGlvbihqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQoY29tcGlsZU1vZGUgPT0gQ29tcGlsZU90aGVyKTsKKyAgICAgICAg
QVNTRVJUKCFqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0YUZs
b3dKSVQuY29tcGlsZShqaXRDb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRD
b2RlJiBqaXRDb2RlKQoreworICAgIHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywg
MCwgY29kZUJsb2NrLCBqaXRDb2RlLCAwKTsKK30KKworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2spCit7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBl
eGVjLCBjYWxsZWVBcmdzRXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdpdGhBcml0
eUNoZWNrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEcml2ZXJfaAorI2RlZmluZSBERkdEcml2ZXJf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBFeGVjU3RhdGU7CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVRDb2RlOworY2xhc3MgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOworCituYW1lc3BhY2UgREZHIHsKKworI2lmIEVOQUJMRShERkdf
SklUKQorYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKTsK
K2Jvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJn
c0V4ZWMsIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENv
ZGVXaXRoQXJpdHlDaGVjayk7CisjZWxzZQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZShFeGVjU3Rh
dGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29s
IHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBK
SVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRp
ZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYg
KzEyMSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAg
fQogICAgIGlmIChvcCA9PSBKU0NvbnN0YW50KSB7CiAgICAgICAgIHByaW50ZigiJXMkJXUiLCBo
YXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmNvbnN0YW50TnVtYmVyKCkpOworICAgICAgICBp
ZiAoY29kZUJsb2NrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9m
SlNDb25zdGFudChjb2RlQmxvY2spOworICAgICAgICAgICAgcHJpbnRmKCIgPSAlcyIsIHZhbHVl
LmRlc2NyaXB0aW9uKCkpOworICAgICAgICB9CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwog
ICAgIH0KICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7CkBAIC0x
ODYsMTcgKzE5MCw0NyBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiAg
ICAgfQogfQogCi12b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4
ZWMpCit2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0
ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQcmVk
aWN0aW9ucy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgbnVtYmVy
T2ZBcmd1bWVudHM7ICsrYXJnKSB7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KGFyZyAtIDEpOwotICAgICAgICBpZiAoYXJndW1lbnRWYWx1ZS5pc0ludDMy
KCkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFBy
ZWRpY3RJbnQzMjsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgpKQot
ICAgICAgICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVkaWN0
RG91YmxlOworICAgIGlmIChleGVjKSB7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50
cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1l
bnRQcmVkaWN0aW9ucy5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgYXJn
ID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7CisgICAgICAgICAgICBKU1Zh
bHVlIGFyZ3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKKyAgICAgICAgICAg
IGlmIChhcmd1bWVudFZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGFyZ3VtZW50VmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIEFTU0VS
VChjb2RlQmxvY2spOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKTsKKworICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAg
IEFTU0VSVChjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA+PSAxKTsKKyAgICBmb3IgKHNpemVf
dCBhcmcgPSAxOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJh
bWV0ZXJzKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmls
ZWRDb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIGlmICgh
cHJvZmlsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfREVCVUdf
VkVSQk9TRQorICAgICAgICBwcmludGYoIkFyZ3VtZW50IHByb2ZpbGUgWyVsdV06ICIsIGFyZyk7
CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOwor
I2VuZGlmCisgICAgICAgIAorICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRp
Y3Rpb25zW2FyZ10ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2ZpbGUp
KTsKKyAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCIgICAg
UHJlZGljdGlvbjogJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2FyZ3VtZW50UHJlZGljdGlv
bnNbYXJnXS5tX3ZhbHVlKSk7CisjZW5kaWYKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShjb2RlQmxvY2spOworI2VuZGlmCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0NDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPFJlZ2lzdGVy
RmlsZS5oPgotI2luY2x1ZGUgPGRmZy9ERkdOb2RlLmg+CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTEzNSwxMiArMTM2LDExIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuICptX2Jsb2Nrc1tibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdp
bildOwogICAgIH0KIAotICAgIHZvaWQgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3Qo
aW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBz
b3VyY2UpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRQcmVk
aWN0aW9ucy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAg
ICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XS5t
X3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFBy
ZWRpY3Rpb25zW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVy
YW5kID49IG1fdmFyaWFibGVQcmVkaWN0aW9ucy5zaXplKCkpIHsKQEAgLTE0OCwzNyArMTQ4LDM3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fdmFyaWFibGVQcmVkaWN0aW9ucy5yZXNpemUob3Bl
cmFuZCArIDEpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtZXJnZVByZWRpY3Rpb24o
bV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFy
aWFibGVQcmVkaWN0aW9uc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0
aW9uLCBzb3VyY2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0R2xvYmFsVmFyKHVu
c2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291
cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVy
LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAg
IHsKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBp
dGVyID0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAg
ICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmVuZCgpKSB7CiAgICAgICAgICAg
ICBQcmVkaWN0aW9uU2xvdCBwcmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIG1lcmdlUHJlZGlj
dGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9uKHByZWRp
Y3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwog
ICAgICAgICAgICAgbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5hZGQodmFyTnVtYmVyICsgMSwgcHJl
ZGljdGlvblNsb3QpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQ
cmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIG1lcmdl
UHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlv
biwgc291cmNlKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBub2RlLCBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJv
b2wgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rp
b25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJl
ZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwo
KSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1i
ZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwg
c291cmNlKTsKICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoK
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNl
IENvbnN0cnVjdDoKLSAgICAgICAgICAgIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2Up
OworICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOwog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIyNiwxMiArMjI2LDQzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKICAgICAgICAgfQogICAgIH0KKyAgICAK
KyAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgorICAg
IGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGF0KG5vZGVJbmRleCkuaXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSlNDb25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJ
bmRleCkuaXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2spOworICAgIH0KKyAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJsZUNv
bnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25z
dGFudCB2YWx1ZXMgZnJvbSBub2Rlcy4KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENv
ZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9
CisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgp
LnZhbHVlT2ZJbnQzMkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGRvdWJsZSB2YWx1
ZU9mRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mRG91YmxlQ29u
c3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNv
bnN0IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlZGljdEFy
Z3VtZW50VHlwZXMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+
ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRy
ZW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEzLDYgKzkxMyw3IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9
IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxsID0gbV9q
c0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAg
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQYXRo
QmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVj
ayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNywz
OSArMjA3LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBj
aGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdyYXBoKClbbm9kZUluZGV4XS5pc0Nv
bnN0YW50KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29uc3RhbnQo
KTsKLSAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0RvdWJs
ZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNK
U0NvbnN0YW50KG5vZGVJbmRleCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051
bWJlcigpOwotICAgIH0KKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gZ3JhcGgoKS5pc0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSlND
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlNDb25zdGFu
dChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJ
bmRleCk7IH0KKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgp
OyB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVz
LgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHVu
c2lnbmVkIGNvbnN0YW50SW5kZXggPSBncmFwaCgpW25vZGVJbmRleF0uY29uc3RhbnROdW1iZXIo
KTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleCkuZ2V0KCk7Ci0gICAgfQotICAgIGlu
dDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVy
biB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKLSAgICB9Ci0gICAgZG91
YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVy
biB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAg
IH0KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsg
cmV0dXJuIGdyYXBoKCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7
IH0KKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJ
bmRleCk7IH0KKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygp
LCBub2RlSW5kZXgpOyB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5h
bWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBERkdfSklUX0FT
U0VSVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0NDg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDYgKzU0LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5o
IgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewpAQCAtMTk1LDYgKzE5OCw3IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRp
Y3RBcnJheSAKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0
Owogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CiBzdGF0
aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRpYyBjb25z
dCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RUb3AgICAgPSAweDBmOwogc3RhdGljIGNvbnN0IFByZWRp
Y3RlZFR5cGUgRHluYW1pY1ByZWRpY3Rpb25UYWcgPSAweDgwOwogc3RhdGljIGNvbnN0IFByZWRp
Y3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwOwogCkBAIC0yMDIsNyArMjA2LDcg
QEAgZW51bSBQcmVkaWN0aW9uU291cmNlIHsgU3RhdGljUHJlZGljdGlvbgogCiBpbmxpbmUgYm9v
bCBpc0NlbGxQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICh2
YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgflByZWRpY3RB
cnJheSk7CisgICAgcmV0dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0Q2VsbCAm
JiAhKHZhbHVlICYgfihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwogfQogCiBp
bmxpbmUgYm9vbCBpc0FycmF5UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjIy
LDcgKzIyNiw3IEBAIGlubGluZSBib29sIGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0ZWQKIAog
aW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH5QcmVkaWN0
TnVtYmVyKTsKKyAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZhbHVl
ICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0KIAogaW5saW5lIGJv
b2wgaXNEeW5hbWljUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjMxLDYgKzIz
NSw0MiBAQCBpbmxpbmUgYm9vbCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlCiAgICAgcmV0
dXJuICEhKHZhbHVlICYgRHluYW1pY1ByZWRpY3Rpb25UYWcpOwogfQogCisjaWZuZGVmIE5ERUJV
RworaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBlIHZh
bHVlKQoreworICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKHZhbHVlKSkgeworICAgICAgICBz
d2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7CisgICAgICAgIGNhc2UgUHJlZGlj
dE5vbmU6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWJvdHRvbSI7CisgICAgICAgIGNhc2Ug
UHJlZGljdENlbGw6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWNlbGwiOworICAgICAgICBj
YXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tYXJyYXkiOworICAg
ICAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4taW50MzIi
OworICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gInAtZHlu
LW51bWJlciI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLXRv
cCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgUHJl
ZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC1zdGF0LWJvdHRvbSI7CisgICAgY2FzZSBQcmVk
aWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtY2VsbCI7CisgICAgY2FzZSBQcmVkaWN0
QXJyYXk6CisgICAgICAgIHJldHVybiAicC1zdGF0LWFycmF5IjsKKyAgICBjYXNlIFByZWRpY3RJ
bnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtaW50MzIiOworICAgIGNhc2UgUHJlZGljdE51
bWJlcjoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtbnVtYmVyIjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gInAtc3RhdC10b3AiOworICAgIH0KK30KKyNlbmRpZgorCiBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVk
VHlwZSByaWdodCkKIHsKICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSA9PSBpc0R5
bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSkKQEAgLTI0NSw5ICsyODUsMTIgQEAgaW5saW5lIFByZWRp
Y3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
aW5saW5lIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQp
CitpbmxpbmUgYm9vbCBtZXJnZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdo
dCkKIHsKLSAgICBsZWZ0ID0gc3RhdGljX2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNf
Y2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KSwgcmlnaHQpKTsKKyAgICBQcmVkaWN0ZWRUeXBlIG5l
d1ByZWRpY3Rpb24gPSBzdGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0
PFByZWRpY3RlZFR5cGU+KGxlZnQpLCByaWdodCkpOworICAgIGJvb2wgcmVzdWx0ID0gbmV3UHJl
ZGljdGlvbiAhPSBzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KTsKKyAgICBsZWZ0ID0g
bmV3UHJlZGljdGlvbjsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBpbmxpbmUgUHJlZGljdGVk
VHlwZSBtYWtlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHR5cGUsIFByZWRpY3Rpb25Tb3VyY2Ug
c291cmNlKQpAQCAtMjU5LDIzICszMDIsMzEgQEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVBy
ZWRpY3Rpb24oUHJlZAogICAgIHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBEeW5hbWljUHJlZGlj
dGlvbiA/IER5bmFtaWNQcmVkaWN0aW9uVGFnIDogMCk7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1p
bmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUp
CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQoraW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVBy
ZWRpY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWYWx1ZVByb2ZpbGUmIHBy
b2ZpbGUpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0g
ICAgICAgIHJldHVybiAicC1ib3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAg
IHJldHVybiAicC1jZWxsIjsKLSAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgcmV0dXJu
ICJwLWFycmF5IjsKLSAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJwLWlu
dDMyIjsKLSAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC1udW1iZXIi
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC10b3AiOwotICAgIH0KKyAgICBWYWx1
ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3RhdGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0
aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRpc3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGlj
cy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0
YXRpc3RpY3MuaW50MzJzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5
bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0
aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHluYW1p
Y1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0RG91YmxlOworICAgIAorICAgIGlmIChzdGF0aXN0aWNz
LmludDMycyArIHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAg
ICAgIHJldHVybiBEeW5hbWljUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisg
ICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAg
cmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAorICAgIGlm
IChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJu
IER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdENlbGw7CisgICAgCisgICAgcmV0dXJuIER5
bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdFRvcDsKIH0KICNlbmRpZgogCkBAIC0zNTYsNiAr
NDA3LDMzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7CiAg
ICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZU9m
SlNDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBj
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBj
b25zdGFudE51bWJlcigpKS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0ludDMyQ29u
c3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25z
dGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNJbnQzMigpOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaykuaXNOdW1iZXIoKTsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCB2YWx1ZU9mSW50
MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25z
dGFudChjb2RlQmxvY2spLmFzSW50MzIoKTsKKyAgICB9CisKKyAgICBkb3VibGUgdmFsdWVPZkRv
dWJsZUNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIH0KIAogICAgIGJv
b2wgaGFzTG9jYWwoKQogICAgIHsKQEAgLTQ3MCw3ICs1NDgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihtX29wSW5mbzIpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVk
aWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCho
YXNQcmVkaWN0aW9uKCkpOwogICAgICAgICAKQEAgLTQ3OCwxNiArNTU2LDE5IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgLy8gdG8gaGVhcCBsb2FkcyBhcyB3ZWxsIGFzIGNhbGxzIGlzIG5vdCBw
cm9maXRhYmxlLCBhcyB0aGVzZSBwcmVkaWN0aW9ucwogICAgICAgICAvLyBhcmUgd3JvbmcgdG9v
IG9mdGVuLiBIZW5jZSwgdGhpcyBjb21wbGV0ZWx5IGlnbm9yZXMgc3RhdGljIHByZWRpY3Rpb25z
LgogICAgICAgICBpZiAoc291cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpZiAo
cHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChzb3VyY2UgPT0gRHlu
YW1pY1ByZWRpY3Rpb24pOwogICAgICAgICAKLSAgICAgICAgbV9vcEluZm8yIHw9IER5bmFtaWNQ
cmVkaWN0aW9uVGFnIHwgcHJlZGljdGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVk
aWN0aW9uID0gRHluYW1pY1ByZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOworICAgICAgICBib29s
IHJlc3VsdCA9IG1fb3BJbmZvMiAhPSBuZXdQcmVkaWN0aW9uOworICAgICAgICBtX29wSW5mbzIg
fD0gbmV3UHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BhZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklU
KSAmJiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByb3BhZ2F0b3Ig
eworcHVibGljOgorICAgIFByb3BhZ2F0b3IoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sp
CisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFs
RGF0YSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9m
aWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgeworICAgICAgICBtX3ByZWRpY3Rpb25zLnJl
c2l6ZShtX2dyYXBoLnNpemUoKSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAwOyBpIDwg
bV9ncmFwaC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVk
aWN0Tm9uZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhwb2ludCgpCisgICAgeworI2lmIERG
R19ERUJVR19WRVJCT1NFCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZv
ciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRl
ZCBjb2RlLgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9w
YWdhdGVGb3J3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFn
YXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwK
KyAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQg
b25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBj
YXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50
CisgICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2ly
Y3VpdHMgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2Vk
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBE
byBhbm90aGVyIGZvcndhcmQgcGFzcyBiZWNhdXNlIGZvcndhcmQgcGFzc2VzIGFyZSBvbiBhdmVy
YWdlIG1vcmUKKyAgICAgICAgICAgIC8vIHByb2ZpdGFibGUuCisgICAgICAgICAgICBtX2NoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgfSB3
aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0UHJl
ZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV9w
cmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gPT0gcHJlZGljdGlvbikKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID0g
cHJlZGljdGlvbjsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAg
ICAgICAgaWYgKERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5k
ZXhdLCBwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQor
ICAgIAorICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CisgICAgICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bm9kZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rp
b24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgZWxzZSBp
ZiAodmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQ
cmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJm1fZ2xv
YmFsRGF0YSwgY2VsbCkpCisgICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdEFycmF5LCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0Q2VsbCwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwg
RHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7Cisg
ICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAg
ICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAg
ICAgICAgIG1fY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRp
Y3Rpb25zW25vZGUuY2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBEeW5hbWljUHJlZGlj
dGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhv
cjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAg
ICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAg
ICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgRHluYW1pY1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAg
ICAgICAgICAgICAgIGlmIChpc051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAg
ICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0TnVtYmVyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZh
bHVlQWRkOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25z
W25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChp
c0R5bmFtaWNQcmVkaWN0aW9uKGxlZnQpICYmIGlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJl
clByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5h
bWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwg
RHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIER5bmFt
aWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2Ug
QXJpdGhTdWI6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkgJiYgaXNE
eW5hbWljUHJlZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlBy
ZWRpY3Rpb24obWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAgICAgICAg
ICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWlj
UHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
bWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFtaWNQcmVk
aWN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRpY3Rpb24p
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBMb2dpY2FsTm90OgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNl
IENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXJFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNh
c2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgc2FkLCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVkaWN0aW9u
LCBldmVuIHRob3VnaCB3ZSBlYXNpbHkKKyAgICAgICAgICAgIC8vIGNvdWxkLgorICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBEeW5hbWljUHJlZGlj
dGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNl
IEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7
CisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24o
KSkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rp
b24oUHJlZGljdENlbGwsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7Cisg
ICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEdsb2JhbFZh
clByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAoaXNEeW5hbWlj
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24o
cHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0g
bV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGljdGlvbnNb
bm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIER5bmFtaWNQcmVkaWN0aW9uKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1
cm4gYW55dGhpbmcuCisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKKyAgICAgICAgY2FzZSBERkc6Okp1bXA6CisgICAgICAgIGNhc2UgQnJhbmNoOgor
ICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNl
IFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAg
Y2FzZSBQaGk6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBU
aGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIGZvciB0aGVt
LCB5ZXQuCisgICAgICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToK
KyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBwcm9wYWdhdGVGb3J3YXJkKCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAg
ICAgcHJpbnRmKCJQcm9wYWdhdGluZyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5k
aWYKKyAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9n
cmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGVOb2Rl
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdh
dGVCYWNrd2FyZCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50
ZigiUHJvcGFnYXRpbmcgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAg
ICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4
LS0gPiAwOykKKyAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGUobV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0pOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBKU0dsb2JhbERhdGEm
IG1fZ2xvYmFsRGF0YTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9j
ayogbV9wcm9maWxlZEJsb2NrOworICAgIAorICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsK
KyAgICAKKyAgICBWZWN0b3I8UHJlZGljdGVkVHlwZSwgMTY+IG1fcHJlZGljdGlvbnM7CisKKyNp
ZiBERkdfREVCVUdfVkVSQk9TRQorICAgIHVuc2lnbmVkIG1fY291bnQ7CisjZW5kaWYKKyAgICAK
KyAgICBib29sIG1fY2hhbmdlZDsKK307CisKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBB
U1NFUlQoY29kZUJsb2NrKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCk7CisgICAgQVNTRVJUKHByb2ZpbGVkQmxvY2spOworICAgIAorICAg
IFByb3BhZ2F0b3IgcHJvcGFnYXRvcihncmFwaCwgKmdsb2JhbERhdGEsIGNvZGVCbG9jaywgcHJv
ZmlsZWRCbG9jayk7CisgICAgcHJvcGFnYXRvci5maXhwb2ludCgpOworICAgIAorI2lmIERGR19E
RUJVR19WRVJCT1NFCisgICAgZ3JhcGguZHVtcChjb2RlQmxvY2spOworI2VuZGlmCit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBF
TkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdQcm9wYWdhdGlvbl9oCisjZGVmaW5lIERGR1Byb3BhZ2F0aW9uX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVzcGFjZSBERkcg
eworCisvLyBQcm9wYWdhdGUgZHluYW1pYyBwcmVkaWN0aW9ucyBmcm9tIHZhbHVlIHNvdXJjZXMg
dG8gdmFyaWFibGVzLgorI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKK3ZvaWQgcHJv
cGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKik7CisjZWxzZQoraW5saW5l
IHZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKikgeyB9Cisj
ZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYKKyNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5NDQ4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5Myw2ICs1OTMsOSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGluCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAg
ICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxE
YXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxM
aW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAgICAgICAKKyAgICAgICAgaWYgKGNh
bGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5n
Q2FsbCgmY2FsbExpbmtJbmZvKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZv
ckNhbGwpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJKHJl
dmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNiArMjE4LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5v
ZGU6Ok5vZGUoSGFuZGxlSGVhcAogICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXApCiAgICAg
LCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3By
ZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkBAIC0yMjUsNiArMjI3LDggQEAgaW5saW5l
IEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aQogICAgIDogbV9oYW5kbGVIZWFwKDAp
CiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAg
LCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTYgQEAgSklUOjpKSVQoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogewogfQogCisjaWYgRU5BQkxFKFRJRVJFRF9D
T01QSUxBVElPTikKK3ZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9u
Q2hlY2tLaW5kIGtpbmQpCit7CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IDEgOiAz
MCksIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPm1fZXhlY3V0ZUNvdW50ZXIpKTsKKyAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVj
ayA/IGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3AgOiBjdGlfb3B0aW1pemVfZnJvbV9yZXQpOworICAg
IHN0dWJDYWxsLmNhbGwoKTsKKyAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKK30KKyNlbmRp
ZgorCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkK
IHsKQEAgLTEwMiw2ICsxMTIsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAg
c3R1YkNhbGwuY2FsbCh0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CiAgICAgc3R1YkNhbGwuZ2V0QXJn
dW1lbnQoMCwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVsb2FkIGxhc3QgcmVzdWx0IHJlZ2lzdGVycy4K
ICAgICBza2lwVGltZW91dC5saW5rKHRoaXMpOworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25D
aGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2Vsc2UKIHZvaWQgSklUOjplbWl0VGlt
ZW91dENoZWNrKCkKQEAgLTExMSw2ICsxMjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVj
aygpCiAgICAgc2tpcFRpbWVvdXQubGluayh0aGlzKTsKIAogICAgIGtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsKKyAgICAKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlv
bkNoZWNrKTsKIH0KICNlbmRpZgogCkBAIC02MjMsNyArNjM3LDcgQEAgSklUQ29kZSBKSVQ6OnBy
aXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAg
KmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNo
ZWNrKTsKLQorICAgIAogICAgIHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpLCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiB9CiAKQEAgLTYzNyw2ICs2NTEsOSBAQCB2b2lk
IEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0
KCpnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIsIGNvZGUpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0lu
Y29taW5nQ2FsbChjYWxsTGlua0luZm8pOwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxs
IHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNiArOTcyLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAvLyBMb2FkcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xlIGNoYXJh
Y3RlciBzdHJpbmcgaW50byBkc3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0ZXJTdHJp
bmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpOwog
ICAgICAgICAKKyAgICAgICAgZW51bSBPcHRpbWl6YXRpb25DaGVja0tpbmQgeyBMb29wT3B0aW1p
emF0aW9uQ2hlY2ssIFJldE9wdGltaXphdGlvbkNoZWNrIH07CisjaWYgRU5BQkxFKFRJRVJFRF9D
T01QSUxBVElPTikKKyAgICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0
aW9uQ2hlY2tLaW5kKTsKKyNlbHNlCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNr
KE9wdGltaXphdGlvbkNoZWNrS2luZCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIHZv
aWQgZW1pdFRpbWVvdXRDaGVjaygpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBwcmlu
dEJ5dGVjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24g
OTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZh
cmFyZ3NTbG93Q2FzZShJCiAKIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6
YXRpb25DaGVjayk7CisgICAgCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKIAogICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTEx
OCw2ICsxMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAK
IHZvaWQgSklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRp
b25DaGVjayk7CisgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJl
dmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDIzICsyNyw1MCBAQAogI2RlZmluZSBKSVRDb2RlX2gKIAogI2lm
IEVOQUJMRShKSVQpCi0KICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJvZmls
ZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAg
Y2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKKyNlbmRpZgogICAg
IAogICAgIGNsYXNzIEpJVENvZGUgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHR5cGVkZWYg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIENvZGVQdHI7CisjZWxzZQorICAgICAgICBKSVRDb2RlKCkgeyB9CisjZW5k
aWYKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJh
c2VsaW5lSklULCBERkdKSVQgfTsKLQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUg
Ym90dG9tVGllckpJVCgpCisgICAgICAgIHsKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9O
KQorICAgICAgICAgICAgcmV0dXJuIEJhc2VsaW5lSklUOworI2Vsc2UKKyAgICAgICAgICAgIHJl
dHVybiBERkdKSVQ7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlj
IEpJVFR5cGUgdG9wVGllckpJVCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBERkdK
SVQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIG5leHRUaWVy
SklUKEpJVFR5cGUgaml0VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChqaXRUeXBlLCBqaXRUeXBlID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0gREZHSklUKTsK
KyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgSklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNTMs
NyArODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5
cGUpCiAgICAgICAgIHsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBib29sIG9wZXJh
dG9yICEoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTI0LDEwICsxNTEsOSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBDb2RlUmVmIG1fcmVmOwogICAgICAgICBKSVRUeXBlIG1faml0VHlwZTsK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIH07CiAKIH07CiAKICNlbmRpZgotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24g
OTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTIsNiArNDUyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZf
YXJndW1lbnRzKElucwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0
aW9uQ2hlY2spOworICAgIAogICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7
CiAgICAgQVNTRVJUKHJlZ1QxICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChy
ZXR1cm5WYWx1ZVJlZ2lzdGVyICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQ3Miw2ICs0NzQs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklU
OjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7
CisgICAgCiAgICAgQVNTRVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAgICBBU1NF
UlQocmVnVDEgIT0gcmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJldHVyblZhbHVl
UmVnaXN0ZXIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiArMTgxNiwzMiBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9jaGVja19oYXNfCiAgICAgVk1fVEhST1df
RVhDRVBUSU9OX0FUX0VORCgpOwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRp
bWl6ZV9mcm9tX2xvb3ApCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAg
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisK
KyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZy
YW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsK
K30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9yZXQpCit7Cisg
ICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3Ig
PSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAg
ICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVk
IGNvbXBpbGF0aW9uIGZyb20gcmV0IGZhaWxlZC5cbiIpOworfQorCiBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfaW5zdGFuY2VvZikKIHsKICAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIzLDYgKzQyMyw4IEBAIGV4dGVybiAiQyIgewogICAg
IHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZl
cmVuY2VfZXJyb3IoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcHRpbWl6ZV9mcm9tX2xvb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX3JldChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAg
IHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2soU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9qaXRD
b21waWxlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNjYgKzI4LDE2IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkpJVC5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlVTdHJpbmdCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiVmVjdG9yLmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNsdWRlICJERkdCeXRl
Q29kZVBhcnNlci5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCi0jZW5kaWYKLQogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBFeGVjdXRhYmxlQmFzZTo6c19pbmZvID0g
eyAiRXhlY3V0YWJsZSIsIDAsIDAsIDAgfTsKIAotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxF
KERGR19KSVQpCi1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUpCi17Ci0jaWYgRU5BQkxFKERGR19K
SVRfUkVTVFJJQ1RJT05TKQotICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBv
cnRlZCwgZG9uJ3QgYm90aGVyIHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55
IGp1bXAgdGFyZ2V0cy4KLSAgICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVF9SRVNUUklD
VElPTlMpCi0KLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIERGRzo6R3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2Rl
QmxvY2stPm1fbnVtVmFycyk7Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVC
bG9jaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERGRzo6SklUQ29tcGlsZXIgZGF0
YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFGbG93SklULmNv
bXBpbGUoaml0Q29kZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHRyeURG
R0NvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4
ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKLXsKLSNpZiBFTkFCTEUoREZHX0pJVF9S
RVNUUklDVElPTlMpCi0gICAgLy8gRklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQgc3VwcG9ydGVk
LCBkb24ndCBib3RoZXIgc2Nhbm5pbmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBhbnkganVt
cCB0YXJnZXRzLgotICAgIGlmIChjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9O
UykKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgREZHOjpHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9j
ay0+bV9udW1WYXJzKTsKLSAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNhbGxlZUFyZ3NFeGVjKQotICAg
ICAgICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMpOwotCi0gICAgREZH
OjpKSVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7Ci0g
ICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlD
aGVjayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLXN0
YXRpYyBib29sIHRyeURGR0NvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYp
IHsgcmV0dXJuIGZhbHNlOyB9Ci1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29k
ZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE2Niw4ICsxMTYsMTggQEAgRnVuY3Rpb25FeGVj
dXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoRQogewogfQogCitKU09iamVjdCogRXZhbEV4ZWN1
dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWlj
R2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9
IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwo
ZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9j
ay0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICBy
ZXR1cm4gZXJyb3I7Cit9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVy
bmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNP
YmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
IHsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTgzLDI2ICsxNDMsNDEgQEAgSlNPYmpl
Y3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogCiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAg
ICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQ
dHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRl
cigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2Rl
R2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxO
b2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlv
dXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0
VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7
CisgICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywg
Z2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxE
ZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNv
ZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZh
bE5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVH
ZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5l
cmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay5jbGVhcigpOwor
ICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxv
Y2s+KG1fZXZhbENvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBldmFs
Tm9kZS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAK
ICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2V2YWxDb2RlQmxvY2stPmNvcHlE
YXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5n
bG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRy
eURGR0NvbXBpbGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxs
KTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9
IGZhbHNlOworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAg
ICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2su
Z2V0KCksIG1faml0Q29kZUZvckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpCisgICAg
ICAgICAgICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSB8fCAhbV9ldmFs
Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5oYXNJbmNvbWluZ0NhbGxzKCkpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0aXZlIHBpZWNl
IG9mIGNvZGUgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIC8vIEpJ
VCwgc28gd2UgY2FuIHNpbGVudGx5IGZhaWwuCisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJs
b2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2st
PnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2st
PmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxl
KHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOworICAg
ICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNv
ZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9ldmFsQ29k
ZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBtX2V2YWxDb2RlQmxv
Y2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkp
OwogICAgIH0KICNlbmRpZgogCkBAIC0yNjEsMTAgKzIzNiwxOSBAQCBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNP
YmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVj
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1
dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgQVNTRVJUKCFtX3Byb2dyYW1Db2RlQmxvY2spOworICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNT
RVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAg
IGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVy
SklUKCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUo
KSkpOworICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9y
OworfQogCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVj
U3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlKQorewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CkBAIC0yNzcsMjUgKzI2MSw0MCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5v
ZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICAKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBh
ZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmpl
Y3QsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+
IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0
KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dy
YW1Db2RlQmxvY2suZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2Rl
QmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlw
ZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7Cisg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhp
cywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBwcmV2aW91
c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdl
bmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCks
IHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1D
b2RlQmxvY2suZ2V0KCksICEhbV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0
ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9y
OjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5n
ZW5lcmF0ZSgpKSkgewotICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJs
b2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAg
cHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAg
ICAgfQogCiAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9wcm9ncmFtQ29k
ZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZn
Q29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwg
bV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJv
b2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6
REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywg
bV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAgICAgaWYg
KGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAg
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVC
bG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAg
ICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9q
aXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwg
bV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRl
ZENvZGUoKSkKICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+ZGlzY2FyZEJ5dGVjb2Rl
KCk7CiAjZW5kaWYKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0
Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5kaWYKIApA
QCAtMzQyLDcgKzM0MSwyOSBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQog
ICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQorSlNPYmplY3QqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVj
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4
ZWMpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIEpTT2JqZWN0KiBlcnJv
ciA9IDA7CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpICE9IEpJVENv
ZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFs
KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6bmV4dFRpZXJK
SVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2Nv
ZGVCbG9ja0ZvckNhbGwpOworICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fY29kZUJs
b2NrRm9yQ29uc3RydWN0KTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQo
KSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2Nv
cGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
LT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7
CisgICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUpCiB7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CkBAIC0zNTgsMTEg
KzM3OSwxMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9i
amVjdC5nZXQoKTsKIAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2Nv
ZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVu
Y3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0
YXJ0T2Zmc2V0KCksIGZhbHNlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5l
cmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hh
aW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9y
Q2FsbC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9
IG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJ
VENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX2Nv
ZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVu
Y3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0
YXJ0T2Zmc2V0KCksIGZhbHNlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBP
d25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVH
ZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ2FsbC0+
c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAhIW1fY29kZUJsb2NrRm9y
Q2FsbC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGls
YXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAo
KGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFz
ZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTM3MywxNyArMzk1LDMxIEBAIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2Rl
QmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURh
dGEoKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7
CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklU
KCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGVGdW5jdGlvbihl
eGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVG
b3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAoIWRm
Z0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CisgICAgICAgIGlm
IChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0g
REZHOjp0cnlDb21waWxlRnVuY3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2Nr
Rm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0
eUNoZWNrKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9j
b2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJs
b2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRp
dmUoKSkgeworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2lu
dGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFs
dGVybmF0aXZlKCkpOworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZG9udE9w
dGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9j
b2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJ
VDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxs
LmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLQorICAgICAgICB9CiAj
aWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0
b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxs
LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDYWxsLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY2FsbGVlQXJn
c0V4ZWMpOwpAQCAtNDAzLDggKzQzOSwxMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogeworICAgIFVO
VVNFRF9QQVJBTShqaXRUeXBlKTsKKyAgICAKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsK
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0
YTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNl
ci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAw
LCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFy
c2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKQEAgLTQxOSwxMSArNDU3LDEy
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0Lmdl
dCgpOwogCi0gICAgQVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywg
RnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgp
LnN0YXJ0T2Zmc2V0KCksIHRydWUpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdl
bmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVD
aGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91
c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnJlbGVhc2UoKTsKKyAgICBBU1NF
UlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2Rl
QmxvY2spOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0
aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5w
cm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCB0cnVlLCBwcmV2aW91c0NvZGVCbG9j
ay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihh
ZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUs
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC5nZXQoKSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSA/
IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVy
YXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRv
ci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIo
KTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0
PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVy
bmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uOwogICAgIH0KQEAgLTQzNCwxNCArNDczLDMwIEBAIEpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0
YSgpOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2
ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVz
ZUpJVCgpKSB7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGlsZShz
Y29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCks
ICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGJvb2wgZGZn
Q29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgcG9zc2libGUgdG8g
Y29tcGlsZSBjb25zdHJ1Y3RvcnMgd2l0aCBERkcuCisgICAgICAgIGlmIChkZmdDb21waWxlZCkg
eworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgp
KQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgp
LT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rp
b25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUo
KSk7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRvbnRPcHRpbWl6
ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsK
KyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5
dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAK
KyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNldEpJVENvZGUobV9qaXRDb2RlRm9y
Q29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CiAgICAgfQog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTAgKzMwNiwxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAg
aWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7CiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAK
ICAgICAgICAgRXZhbENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBA
IC0zNDQsNyArMzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRF
eGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0
YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6
OkpJVFR5cGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOwogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKQEAgLTM2OSwxMSArMzcxLDEzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5k
eW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAg
ICAgICAgICAgICBpZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJv
ciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAg
ICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9n
cmFtQ29kZUJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisg
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CisKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQog
ICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTQw
Myw3ICs0MDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1
dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3Rh
dGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRl
cm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29t
cGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlw
ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAg
ICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIApAQCAtNDUwLDExICs0NTQsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNH
bG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAg
ICAgIGlmICghbV9jb2RlQmxvY2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMp
OworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBz
Y29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNT
dGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9y
Q2FsbCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0Zv
ckNhbGw7CkBAIC00NzEsMTEgKzQ3NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAg
ICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJ
bnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBj
b21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9
CiAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29u
c3RydWN0KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0OwpAQCAtNTAxLDYgKzUwOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBjb21waWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRG
b3IoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcGls
ZU9wdGltaXplZEZvciBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhIGNhbGxmcmFtZSBzZXQg
dXAgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBt
YWtlIHNwZWN1bGF0aXZlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlIGFyZ3VtZW50cy4KKyAg
ICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhl
Yy0+Y2FsbGVlKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAgICAgICAgICAg
IEFTU0VSVChhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhp
cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQor
ICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29w
ZUNoYWluTm9kZSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29u
c3RydWN0KTsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0
KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9v
bCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtNTQ5LDggKzU3MSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRh
JiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VV
c2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBib29sKTsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNv
dXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwg
Ym9vbCk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKTsKLSAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIEpJ
VENvZGU6OkpJVFR5cGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdElu
dGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjAsMTEg
Kzk2MCwyMyBAQAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFkZWZp
bmVkKEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04pICYmIEVOQUJMRShERkdfSklUKQorI2RlZmlu
ZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBDdXJyZW50bHkgb25s
eSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMp
ICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoSklUKSAm
JiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9WQUxVRV9Q
Uk9GSUxFUiAwCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9EWU5BTUlDX09QVElNSVpB
VElPTikKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKSAmJiBFTkFCTEUoVkFMVUVfUFJP
RklMRVIpCisjZGVmaW5lIEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiAxCisjZWxzZQorI2Rl
ZmluZSBFTkFCTEVfRFlOQU1JQ19PUFRJTUlaQVRJT04gMAorI2VuZGlmCisjZW5kaWYKKwogI2lm
ICFkZWZpbmVkKEVOQUJMRV9WRVJCT1NFX1ZBTFVFX1BST0ZJTEUpICYmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKICNkZWZpbmUgRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSAwCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3Qu
aAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVs
TGlua2VkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNCArNDEsNjMgQEAgbmFtZXNwYWNl
IFdURiB7CiAKIGVudW0gU2VudGluZWxUYWcgeyBTZW50aW5lbCB9OwogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgTm9kZT4gY2xhc3MgU2VudGluZWxMaW5rZWRMaXN0IHsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBCYXNpY1Jhd1NlbnRpbmVsTm9kZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBO
b2RlKiBpdGVyYXRvcjsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZShTZW50aW5lbFRhZykKKyAg
ICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKCkKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAg
ICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UHJldihCYXNp
Y1Jhd1NlbnRpbmVsTm9kZSogcHJldikgeyBtX3ByZXYgPSBwcmV2OyB9CisgICAgdm9pZCBzZXRO
ZXh0KEJhc2ljUmF3U2VudGluZWxOb2RlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KKyAgICAK
KyAgICBUKiBwcmV2KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJldik7IH0KKyAgICBU
KiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fbmV4dCk7IH0KKyAgICAKKyAgICBi
b29sIGlzT25MaXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghIW1fcHJldiA9PSAh
IW1fbmV4dCk7CisgICAgICAgIHJldHVybiAhIW1fcHJldjsKKyAgICB9CisgICAgCisgICAgdm9p
ZCByZW1vdmUoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUqIG1f
bmV4dDsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9wcmV2OworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGUgPSBUPiBjbGFzcyBTZW50aW5lbExpbmtlZExp
c3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAKICAgICBTZW50aW5lbExp
bmtlZExpc3QoKTsKIAotICAgIHZvaWQgcHVzaChOb2RlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVt
b3ZlKE5vZGUqKTsKKyAgICB2b2lkIHB1c2goVCopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZShU
Kik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpOwogICAgIGl0ZXJhdG9yIGVuZCgpOwogCiBwcml2
YXRlOgotICAgIE5vZGUgbV9oZWFkU2VudGluZWw7Ci0gICAgTm9kZSBtX3RhaWxTZW50aW5lbDsK
KyAgICBSYXdOb2RlIG1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUgbV90YWlsU2VudGluZWw7
CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsTGlua2VkTGlz
dDxOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lk
IEJhc2ljUmF3U2VudGluZWxOb2RlPFQ+OjpyZW1vdmUoKQoreworICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxULCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxUPiA+OjpyZW1vdmUoc3RhdGljX2Nhc3Q8VCo+
KHRoaXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlu
bGluZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OlNlbnRpbmVsTGlua2VkTGlzdCgp
CiAgICAgOiBtX2hlYWRTZW50aW5lbChTZW50aW5lbCkKICAgICAsIG1fdGFpbFNlbnRpbmVsKFNl
bnRpbmVsKQogewpAQCAtNjksMjEgKzEwOCwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4g
aW5saW5lIFNlbnRpbmVsCiAgICAgbV90YWlsU2VudGluZWwuc2V0TmV4dCgwKTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8
Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6YmVnaW4oKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5l
bExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBS
YXdOb2RlPjo6YmVnaW4oKQogewotICAgIHJldHVybiBtX2hlYWRTZW50aW5lbC5uZXh0KCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX2hlYWRTZW50aW5lbC5uZXh0KCkpOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlz
dDxOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjplbmQoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5l
bExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBS
YXdOb2RlPjo6ZW5kKCkKIHsKLSAgICByZXR1cm4gJm1fdGFpbFNlbnRpbmVsOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUKj4oJm1fdGFpbFNlbnRpbmVsKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cHVzaChOb2Rl
KiBub2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2
b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6cHVzaChUKiBub2RlKQogewogICAg
IEFTU0VSVChub2RlKTsKLSAgICBOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOwotICAgIE5v
ZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgQVNTRVJUKCFub2RlLT5wcmV2
KCkpOworICAgIEFTU0VSVCghbm9kZS0+bmV4dCgpKTsKKyAgICAKKyAgICBSYXdOb2RlKiBwcmV2
ID0gJm1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5u
ZXh0KCk7CiAKICAgICBub2RlLT5zZXRQcmV2KHByZXYpOwogICAgIG5vZGUtPnNldE5leHQobmV4
dCk7CkBAIC05MiwxNyArMTM0LDI1IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUg
dm9pZCBTZW4KICAgICBuZXh0LT5zZXRQcmV2KG5vZGUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgTm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUoTm9k
ZSogbm9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUg
dm9pZCBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OnJlbW92ZShUKiBub2RlKQogewot
ICAgIE5vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7Ci0gICAgTm9kZSogbmV4dCA9IG5vZGUtPm5l
eHQoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCEhbm9kZS0+cHJldigpKTsKKyAg
ICBBU1NFUlQoISFub2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYgPSBub2Rl
LT5wcmV2KCk7CisgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKIAogICAgIHByZXYt
PnNldE5leHQobmV4dCk7CiAgICAgbmV4dC0+c2V0UHJldihwcmV2KTsKKyAgICAKKyAgICBub2Rl
LT5zZXRQcmV2KDApOworICAgIG5vZGUtPnNldE5leHQoMCk7CiB9CiAKIH0KIAordXNpbmcgV1RG
OjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTsKIHVzaW5nIFdURjo6U2VudGluZWxMaW5rZWRMaXN0Owog
CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106257</attachid>
            <date>2011-09-03 02:01:17 -0700</date>
            <delta_ts>2011-09-03 02:53:37 -0700</delta_ts>
            <desc>the patch - fix windows</desc>
            <filename>dynopt_patch_7.diff</filename>
            <type>text/plain</type>
            <size>120489</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc4IEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
dGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAor
ICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0
b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2Rl
QmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNv
dW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3Vl
cyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bwor
ICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAg
ICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMs
IGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0
IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJz
dHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBz
dWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9y
bWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0
byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBz
dGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAg
Tm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlz
IGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFp
bGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYg
KHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9jb3B5LWZpbGVzLmNtZDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzIp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtD
YWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUpOgorICAgICAgICAoSlNDOjpy
ZXBsYWNlRXhpc3RpbmdFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0
YUZyb21BbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OnJlcGxh
Y2VtZW50KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlND
OjpQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6RXZhbENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OlZhbHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3RpY3MpOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6ZHluYW1pY2FsbHlQcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
Ojpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
cHJlZGljdEFyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojppc0RvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZkpT
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSW50MzJDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvbXBpbGVyOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpp
c0RvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVP
ZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSW50
MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZEb3Vi
bGVDb25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
Ojppc0NlbGxQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjppc051bWJlclByZWRpY3Rp
b24pOgorICAgICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChK
U0M6OkRGRzo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjptYWtlUHJlZGlj
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aXNEb3VibGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFs
dWVPZkludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhbHVlT2ZEb3Vi
bGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAg
ICogZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJv
cGFnYXRvcjo6UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4
cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Om1lcmdlUHJlZGljdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlRm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJv
cGFnYXRvcjo6cHJvcGFnYXRlQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0
ZSk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAqIGhlYXAvSGFuZGxlSGVhcC5oOgor
ICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRUaW1lb3V0Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAg
ICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAg
ICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklUKToKKyAgICAgICAgKEpTQzo6SklU
Q29kZTo6dG9wVGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om5leHRUaWVySklUKToK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9G
VU5DVElPTik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAg
KEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVP
cHRpbWl6ZWRGb3IpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9T
ZW50aW5lbExpbmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6
OkJhc2ljUmF3U2VudGluZWxOb2RlKToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5v
ZGU6OnNldFByZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0TmV4
dCk6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpwcmV2KToKKyAgICAgICAg
KFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6Om5leHQpOgorICAgICAgICAoV1RGOjpCYXNpY1Jh
d1NlbnRpbmVsTm9kZTo6aXNPbkxpc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAg
ICAgIChXVEY6Ojo6U2VudGluZWxMaW5rZWRMaXN0KToKKyAgICAgICAgKFdURjo6OjpiZWdpbik6
CisgICAgICAgIChXVEY6Ojo6ZW5kKToKKyAgICAgICAgKFdURjo6OjpwdXNoKToKKwogMjAxMS0w
OS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyB2YXJp
YWJsZSBwcmVkaWN0aW9ucyBvbmx5IHdvcmsgZm9yIGxvY2FsIHZhcmlhYmxlcywgbm90IHRlbXBv
cmFyaWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5
NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNiw2ICs2LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Fzc2VtYmxlciIKICAgICAiJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2J5dGVjb2RlIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNv
bXBpbGVyIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGZnIgogICAgICIke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaGVhcCIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2RlYnVnZ2VyIgog
ICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW50ZXJwcmV0ZXIiCkBAIC01NCw3ICs1NSw3IEBA
IFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3BwCiAg
ICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcAotCisgICAgCiAgICAgaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAogICAg
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcAogICAgIGludGVycHJldGVyL1JlZ2lzdGVyRmls
ZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDggQEAgamF2YXNjcmlwdGNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZQUkluZm8u
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaCBcCkBAIC0xMTYsNiArMTE4LDgg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdGlvbi5jcHAgXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRpb24uaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1NTAsNiArMTU1MCwxNCBAQAogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CisgICAgICAgICAgICAgICAgPEZpbHRlcgorICAgICAg
ICAgICAgICAgICAgICAgICAgTmFtZT0iZGZnIgorICAgICAgICAgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxkZmdcREZHRHJpdmVyLmgiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAg
ICAgICAgICAgICAgICA8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJTmFtZT0ieWFyciIKIAkJCT4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvY29weS1maWxlcy5jbWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNtZAko
cmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBAIG1rZGlyICIlUHJpdmF0ZUhlYWRlcnNEaXJlY3RvcnklIiAyPk5VTAogZm9y
ICUlZCBpbiAoCiAgICAgYXNzZW1ibGVyCiAgICAgYnl0ZWNvZGUKKyAgICBkZmcKICAgICBoZWFw
CiAgICAgZGVidWdnZXIKICAgICBpbnRlcnByZXRlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDEwIEBACiAJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsg
fTsKIAkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThE
MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsK
KwkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVEMUEw
MEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi87IH07CisJCTBGRDNDODI2MTQxMTVENDAw
MEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
Ki87IH07CisJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjQxNDEx
NUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmggKi87IH07CisJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMzc1LDcgKzM3
OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3MjcwRUQxQ0U2OTAwRjFG
NjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2OUEwNzJCMEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdp
c3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5oICovOyB9OwogCQk5NjlBMDcy
QzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyOTBFRDFDRTY5MDBGMUY2ODEgLyog
U2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0JCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IH07CisJCTk2
OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8q
IENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3Ry
aWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5QTA3OTcwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5
QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29k
ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovOyB9OwogCQk5NjlB
MDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJ
bnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5LDYgKzc4MywxMCBAQAogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFi
bGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0
aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4
MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdQ
cm9wYWdhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNDODI0MTQx
MTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQcm9wYWdhdGlvbi5oOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAv
KiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9j
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEwIEBACiAJCTg2RUM5REIzMTMyOERGNDQw
MDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5oICovLAor
CQkJCTBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi8sCisJ
CQkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovLAorCQkJCTBGRDND
ODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTg2RUNBNEYwMTMy
RUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCAqLywKIAkJCQk4NkVDOURCNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwICovLAogCQkJCTg2RUM5REI1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovLApAQCAtMjYxNyw2ICsyNjI5
LDggQEAKIAkJCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkQzQzgyNzE0MTE1RDRGMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8q
IFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzMsNiArMzA0Nyw4IEBA
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEM0M4MjYxNDExNUQ0MDAw
RkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0MDUx
MUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
ODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDk0NDg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEsMTcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAg
ICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3Rl
ZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworI2lmIENQVShYODZfNjQp
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgWDg2UmVnaXN0ZXJzOjpy
MTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyMTEpKTsKKyNl
bHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRlc3QubV9wdHIp
OworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRp
b24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgYWRk
MzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDkgKzE0MDEsMTAg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1Db2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xU
YWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0ds
b2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBi
b29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBv
cHRpbWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0
ZXJzKDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAt
MTQyMiw2ICsxNDIzLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCiAgICAgLCBtX3NvdXJjZU9mZnNldChz
b3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bVRhYikKKyAgICAsIG1fYWx0ZXJu
YXRpdmUoYWx0ZXJuYXRpdmUpCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKIApAQCAtMTQ0MSwx
NSArMTQ0MywxOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwgaSArIDEpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogIiwgcHJvZmlsZS0+Ynl0ZWNvZGVP
ZmZzZXQpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAic2FtcGxl
cyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJheSA9ICV1XG4i
LAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpLAotICAgICAgICAg
ICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZJbnQzMigpLAotICAgICAgICAgICAgICAgIHBy
b2ZpbGUtPnByb2JhYmlsaXR5T2ZEb3VibGUoKSwKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5w
cm9iYWJpbGl0eU9mQ2VsbCgpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5
T2ZBcnJheSgpKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRlcnIpOworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQogI2VuZGlmCisgICAgCisgICAgLy8gV2Ugc2hvdWxk
IG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0aGVyZSBhcmUgaW5jb21pbmcgY2FsbHMuIEJ1
dAorICAgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGR1cmluZyBoZWFwIGRlc3RydWN0aW9uLCB0aGVu
IHRoZXJlIG1heSBzdGlsbCBiZQorICAgIC8vIGluY29taW5nIGNhbGxzLCB3aGljaCBpcyBoYXJt
bGVzcy4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgb3VyIG91dGdvaW5nIGNhbGxzIHdpbGwgYmUg
cmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCisgICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxp
bmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2YgdGhlIH5DYWxsTGlua0luZm8KKyAg
ICAvLyBkZXN0cnVjdG9ycy4KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgZm9yIChzaXplX3Qgc2l6
ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBA
IC0xNTE5LDYgKzE1MjQsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0CiB7CiAgICAgYm9vbCBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9IGZhbHNlOwogICAgIAorICAg
IGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX2dsb2JhbE9iamVjdCk7CiAgICAg
dmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxlKTsKICAgICBpZiAobV9yYXJlRGF0YSkg
ewpAQCAtMTc4OSw4ICsxNzk2LDMwIEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9u
KENhbGxGcmEKIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQordm9pZCBDYWxsTGlua0luZm86OnVu
bGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIpCit7CisgICAgQVNTRVJUKGlzTGlua2VkKCkpOworICAgIAorICAgIGlmIChpc0RGRykgewor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9j
YXRpb25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxs
IDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisjZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGw/IGdsb2Jh
bERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogZ2xvYmFsRGF0YS5qaXRTdHVi
cy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgaGFzU2VlblNob3VsZFJlcGF0Y2gg
PSBmYWxzZTsKKyAgICBjYWxsZWUuY2xlYXIoKTsKKworICAgIC8vIEl0IHdpbGwgYmUgb24gYSBs
aXN0IGlmIHRoZSBjYWxsZWUgaGFzIGEgY29kZSBibG9jay4KKyAgICBpZiAoaXNPbkxpc3QoKSkK
KyAgICAgICAgcmVtb3ZlKCk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7
CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dW5saW5r
Q2FsbHMoKTsKICAgICBpZiAoIShtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpIHx8IG1fbWV0aG9kQ2Fs
bExpbmtJbmZvcy5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2dsb2JhbERh
dGEtPmNhblVzZUpJVCgpKQpAQCAtMTc5OSwyNCArMTgyOCwxMDEgQEAgdm9pZCBDb2RlQmxvY2s6
OnVubGlua0NhbGxzKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2FsbExpbmtJbmZv
cy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoIW1fY2FsbExpbmtJbmZvc1tpXS5pc0xpbmtl
ZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChnZXRKSVRDb2RlKCkuaml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5m
b3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG9w
ZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7Ci0jZWxzZQotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChtX2NhbGxM
aW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2Fs
bCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7Ci0gICAgICAgIG1f
Y2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKKyAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVu
bGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKICAgICB9CiB9CisKK3ZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKK3sKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIodGhpcyk7CisgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1f
aW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVu
bGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVyKTsKK30KICNlbmRpZgogCiB2b2lkIENv
ZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUoKQogeworICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisg
ICAgICAgIG1fYWx0ZXJuYXRpdmUtPmNsZWFyRXZhbENhY2hlKCk7CiAgICAgaWYgKCFtX3JhcmVE
YXRhKQogICAgICAgICByZXR1cm47CiAgICAgbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLmNs
ZWFyKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCByZXBsYWNlRXhp
c3RpbmdFbnRyaWVzKFZlY3RvcjxUPiYgdGFyZ2V0LCBWZWN0b3I8VD4mIHNvdXJjZSkKK3sKKyAg
ICBBU1NFUlQodGFyZ2V0LnNpemUoKSA8PSBzb3VyY2Uuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRhcmdldC5zaXplKCk7ICsraSkKKyAgICAgICAgdGFyZ2V0W2ldID0gc291
cmNlW2ldOworfQorCit2b2lkIENvZGVCbG9jazo6Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKQor
eworICAgIGlmICghbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJl
cGxhY2VFeGlzdGluZ0VudHJpZXMobV9jb25zdGFudFJlZ2lzdGVycywgbV9hbHRlcm5hdGl2ZS0+
bV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0
aW9uRGVjbHMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25EZWNscyk7CisgICAgcmVwbGFjZUV4
aXN0aW5nRW50cmllcyhtX2Z1bmN0aW9uRXhwcnMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25F
eHBycyk7Cit9CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSLiBJZiBjb21waWxlT3B0aW1pemVk
KCkgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlCisvLyBlcGlsb2d1ZSwg
ZG8gT1NSIGZyb20gdGhlIG9sZCBjb2RlIGJsb2NrIHRvIHRoZSBuZXcgb25lLgorCisvLyBGSVhN
RTogQWZ0ZXIgZG9pbmcgc3VjY2Vzc2Z1bCBvcHRpbWl6ZWQgY29tcGlsYXRpb24sIHJlc2V0IHRo
ZSBwcm9maWxpbmcgY291bnRlciB0byAtMSwgc28KKy8vIHRoYXQgdGhlIG5leHQgZXhlY3V0aW9u
IG9mIHRoZSBvbGQgY29kZSBibG9jayB3aWxsIGp1bXAgc3RyYWlnaHQgaW50byBjb21waWxlT3B0
aW1pemVkKCkKKy8vIGFuZCBwZXJmb3JtIE9TUi4KKworLy8gRklYTUU6IEVuc3VyZSB0aGF0IGEg
Y2FsbCB0byBjb21waWxlT3B0aW1pemVkKCkganVzdCBkb2VzIE9TUiAoYW5kIHJlc2V0cyB0aGUg
Y291bnRlciB0byAtMSkKKy8vIGlmIHRoZSBjb2RlIGhhZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQu
CisKK0NvZGVCbG9jayogUHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJl
dHVybiAmc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkt
PmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayogRXZhbENvZGVCbG9jazo6cmVw
bGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVCbG9jayog
RnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0
ZWNvZGVGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxs
KTsKK30KKworSlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYg
KHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRK
SVRUeXBlKCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24n
dCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3Ig
PSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29t
cGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgcmV0dXJuIGVycm9yOwor
fQorCitKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFj
ZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUo
KSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0
aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRp
Y19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1p
emVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2Jq
ZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFjZW1lbnQo
KS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUoKSkpIHsK
KyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0aGlzIGFn
YWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXpl
ZEZvcihleGVjLCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0
cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU2Vn
bWVudGVkVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC05OCwxMiArOTksMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RydWN0
IENhbGxMaW5rSW5mbyB7CisgICAgc3RydWN0IENhbGxMaW5rSW5mbzogcHVibGljIEJhc2ljUmF3
U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBDYWxsTGlua0luZm8oKQogICAg
ICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKICAgICAgICAgICAgICwgaXND
YWxsKGZhbHNlKQorICAgICAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgewogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB+Q2FsbExpbmtJbmZvKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlKCk7CisgICAgICAg
IH0KIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb247IC8vIGl0
J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBKSVQsIG9yIGEgbm9ybWFsIGNhbGwgaW4gREZHCiAg
ICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CkBAIC0xMTEsMTMg
KzExOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+IGNhbGxlZTsKICAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAg
ICAgICAgIGJvb2wgaXNDYWxsIDogMTsKKyAgICAgICAgYm9vbCBpc0RGRyA6IDE7CiAKICAgICAg
ICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQotICAgICAgICB2b2lkIHVubGlu
aygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7
Ci0gICAgICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHVu
bGluayhKU0dsb2JhbERhdGEmLCBSZXBhdGNoQnVmZmVyJik7CiAKICAgICAgICAgYm9vbCBzZWVu
T25jZSgpCiAgICAgICAgIHsKQEAgLTIxMCwxMyArMjE1LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUq
LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7
CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsK
ICAgICAgICAgSGVhcCogbV9oZWFwOwogCiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5D
b2RlQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7
IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9CisgICAgICAgIFBhc3NPd25QdHI8Q29kZUJs
b2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2Uo
KTsgfQogCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CkBAIC0yNzksNiArMjg3
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCB1bmxpbmtD
YWxscygpOworICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNJbmNvbWluZ0NhbGxzKCkgeyByZXR1
cm4gbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpOyB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbExpbmtJbmZvKiBpbmNv
bWluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21p
bmcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHVubGlua0luY29taW5nQ2Fs
bHMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQpAQCAtMzAwLDggKzMxNywx
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
SklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvciA/IG93bmVyRXhl
Y3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkgOiBvd25lckV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQorICAgICAgICB2b2lkIHNldEpJVENv
ZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJp
dHlDaGVjaykKKyAgICAgICAgeworICAgICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKKyAgICAg
ICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOworICAg
ICAgICB9CisgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7
IH0KKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRD
b2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlUG9vbCogZXhlY3V0YWJsZVBvb2wo
KSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBvb2woKTsgfQorICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKikgPSAwOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7
CisjZWxzZQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBK
SVRDb2RlOjpCYXNlbGluZUpJVDsgfQogI2VuZGlmCiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0
KCk7IH0KQEAgLTM5OCw2ICs0MjUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8VmFsdWVQcm9maWxlLCBp
bnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3ZhbHVlUHJvZmlsZXMsIG1fdmFs
dWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQorICAgICAgICBW
YWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGludCBhcmd1bWVudEluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBhcmd1bWVudEluZGV4IC0gMTsKKyAg
ICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID49IG1fdmFsdWVQcm9m
aWxlcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBWYWx1
ZVByb2ZpbGUqIHJlc3VsdCA9IHZhbHVlUHJvZmlsZShhcmd1bWVudEluZGV4IC0gMSk7CisgICAg
ICAgICAgICBpZiAocmVzdWx0LT5ieXRlY29kZU9mZnNldCAhPSAtMSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICNlbmRp
ZgogCiAgICAgICAgIHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbmZvQ291bnQoKSBjb25zdApAQCAt
NTM1LDYgKzU3MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRXZhbENvZGVDYWNoZSYg
ZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9y
YXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKICAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgp
OworICAgICAgICAKKyAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2V4ZWN1dGVDb3VudGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRl
cjsKIAogICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2
YXRlLgogCkBAIC01OTQsNiArNjQ1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5mb3M7CiAgICAgICAgIFZlY3Rv
cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgVmVjdG9yPE1ldGhvZENh
bGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9zOworICAgICAgICBKSVRDb2RlIG1faml0
Q29kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrOworICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+ID4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC02MTAsNiArNjY0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAKKyAgICAgICAgT3du
UHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsgLy8gRklYTUUgbWFrZSB0aGlzIGRvIHNvbWV0
aGluZworCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6CkBAIC02NDYsOSArNzAyLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgLy8gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgaXQuCiAKICAgICBjbGFz
cyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0KQot
ICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFs
T2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAmbV91bnNoYXJlZFN5bWJvbFRh
YmxlLCBmYWxzZSkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0
ZXJuYXRpdmUpCisgICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVU
eXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hh
cmVkU3ltYm9sVGFibGUsIGZhbHNlLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTY1OCwxNiArNzE0LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJv
Z3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCi0gICAgICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJj
ZVByb3ZpZGVyLCAwKQorICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgUGFz
c093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBHbG9iYWxDb2Rl
QmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92
aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICAKKyNp
ZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2
aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogICAgIH07CiAKICAgICBj
bGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGlj
OgotICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgpCi0gICAgICAgICAgICA6IEdsb2Jh
bENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJj
ZVByb3ZpZGVyLCAwKQorICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgsIFBhc3NPd25Q
dHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2Nr
KG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIs
IDAsIGFsdGVybmF0aXZlKQogICAgICAgICAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGJhc2VTY29w
ZURlcHRoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTY4MSw2ICs3NDMsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQobV92YXJpYWJsZXMuaXNFbXB0eSgpKTsKICAg
ICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFibGVzKTsKICAgICAgICAgfQorICAgICAg
ICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVwdGg7CkBAIC02OTMsMTQgKzc2MSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYXMgd2UgbmVlZCB0byBpbml0aWFsaXNlIHRo
ZSBDb2RlQmxvY2sgYmVmb3JlIHdlIGNvdWxkIGluaXRpYWxpc2UgYW55IFJlZlB0ciB0byBob2xk
IHRoZSBzaGFyZWQKICAgICAgICAgLy8gc3ltYm9sIHRhYmxlLCBzbyB3ZSBqdXN0IHBhc3MgYXMg
YSByYXcgcG9pbnRlciB3aXRoIGEgcmVmIGNvdW50IG9mIDEuICBXZSB0aGVuIG1hbnVhbGx5IGRl
cmVmCiAgICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9yLgotICAgICAgICBGdW5jdGlvbkNvZGVC
bG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5
cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1
Y3RvcikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9s
VGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlz
Q29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAg
ICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwg
c291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgp
LmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvciwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAgICAg
ICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2soKQogICAgICAgICB7CiAgICAgICAgICAg
ICBzaGFyZWRTeW1ib2xUYWJsZSgpLT5kZXJlZigpOwogICAgICAgICB9CisgICAgICAgIAorI2lm
IEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZp
cnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAgICAgfTsKIAogICAgIGlu
bGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDk0NDg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBjb3VudHMgKiBjZXJ0YWludHkgLyBudW1iZXJP
ZlNhbXBsZXM7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZklu
dDMycygpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwpAQCAtMTQy
LDYgKzE0Miw4NiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB7CiAgICAgICAgIHJldHVy
biBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJheXMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkp
OwogICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAg
IHsKKyAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAgICAgICAgICAgInNhbXBsZXMgPSAldSwg
aW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJyYXkgPSAldSIsCisgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnQz
MnMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRvdWJsZXMoKSwKKyAgICAgICAgICAgICAg
ICBudW1iZXJPZkNlbGxzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcnJheXMoKSk7Cisg
ICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0g
fHwgISF3ZWFrQnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgeworICAg
ICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIjogIik7CisgICAgICAgICAgICAgICAgICAg
IGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwg
IiVzIiwgSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pLmRlc2NyaXB0aW9uKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0c1tpXSkKKyAgICAgICAgICAgICAg
ICBmcHJpbnRmKG91dCwgIkRlYWRDZWxsIik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAg
ICAKKyAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CisgICAgICAgIHVuc2lnbmVkIHNhbXBsZXM7Cisg
ICAgICAgIHVuc2lnbmVkIGludDMyczsKKyAgICAgICAgdW5zaWduZWQgZG91YmxlczsKKyAgICAg
ICAgdW5zaWduZWQgY2VsbHM7CisgICAgICAgIHVuc2lnbmVkIGFycmF5czsKKyAgICB9OworCisg
ICAgLy8gT3B0aW1pemVkIG1ldGhvZCBmb3IgZ2V0dGluZyBhbGwgY291bnRzIGF0IG9uY2UuCisg
ICAgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0YXRp
c3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBzYW1wbGVz
ID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50MzJzICA9IDA7CisgICAgICAgIHVuc2lnbmVkIGRv
dWJsZXMgPSAwOworICAgICAgICB1bnNpZ25lZCBjZWxscyAgID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgYXJyYXlzICA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnVja2V0c1tpXSkg
eworICAgICAgICAgICAgICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldCA9IHdlYWtCdWNrZXRzW2ld
OworICAgICAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2FtcGxlcysrOworICAgICAgICAgICAgICAgICAgICBjZWxscysrOworICAgICAgICAgICAg
ICAgICAgICBpZiAod2Vha0J1Y2tldC5nZXRDbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZv
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzKys7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBzYW1wbGVzKys7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSk7Cisg
ICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgICAgIGludDMycysr
OworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAg
ICBkb3VibGVzKys7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAg
ICAgICAgICAgICAgIGNlbGxzKys7CisgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheSgmZ2xv
YmFsRGF0YSwgdmFsdWUuYXNDZWxsKCkpKQorICAgICAgICAgICAgICAgICAgICBhcnJheXMrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlzdGljcy5z
YW1wbGVzID0gc2FtcGxlczsKKyAgICAgICAgc3RhdGlzdGljcy5pbnQzMnMgID0gaW50MzJzOwor
ICAgICAgICBzdGF0aXN0aWNzLmRvdWJsZXMgPSBkb3VibGVzOworICAgICAgICBzdGF0aXN0aWNz
LmNlbGxzICAgPSBjZWxsczsKKyAgICAgICAgc3RhdGlzdGljcy5hcnJheXMgID0gYXJyYXlzOwor
ICAgIH0KICAgICAKICAgICBpbnQgYnl0ZWNvZGVPZmZzZXQ7IC8vIC0xIGZvciBwcm9sb2d1ZQog
ICAgIEVuY29kZWRKU1ZhbHVlIGJ1Y2tldHNbbnVtYmVyT2ZCdWNrZXRzXTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyAr
MTkxLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2VydmVMYXN0VmFyKAogICAgICAg
ICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgpOwogfQogCi1CeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFt
Q29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
bXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hv
b2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxk
RW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmls
aW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9i
YWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKQEAgLTIyOCw2ICsyMjgsOSBAQCBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgCiAgICAgbV9jb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyA9IDE7IC8vIEFsbG9jYXRlIHNwYWNlIGZvciAidGhpcyIK
ICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2NrLT5tX251bVZhcnM7
CisgICAgCisgICAgaWYgKGNvbXBpbGF0aW9uS2luZCA9PSBPcHRpbWl6aW5nQ29tcGlsYXRpb24p
CisgICAgICAgIHJldHVybjsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
Y29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yNTgsNyArMjYxLDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIH0KIH0KIAotQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVu
Y3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVD
aGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRF
bWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hT
b3VyY2VJbmZvKCkpCkBAIC00MTksNyArNDIyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKEZ1bgogICAgIH0KIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2NrKQorQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3Nob3VsZEVtaXRE
ZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAsIG1f
c2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRz
UHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWlu
LT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw5ICs5MiwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0
RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKCk7CiAKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0
b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgUHJvZ3JhbUNv
ZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwg
U2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayopOwotICAgICAgICBCeXRl
Y29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBF
dmFsQ29kZUJsb2NrKik7CisgICAgICAgIGVudW0gQ29tcGlsYXRpb25LaW5kIHsgRmlyc3RDb21w
aWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0aW9uIH07CisgICAgICAgIAorICAgICAgICBCeXRl
Y29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUq
LCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUq
LCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRv
cihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2Nr
KiwgQ29tcGlsYXRpb25LaW5kKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEo
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRl
bnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9nbG9iYWxEYXRhLT5w
cm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOSAr
NDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gVGhpcyBjbGFzcyBp
cyB1c2VkIHRvIGNvbXBpbGUgdGhlIGRhdGFmbG93IGdyYXBoIGZyb20gYSBDb2RlQmxvY2suCiBj
bGFzcyBCeXRlQ29kZVBhcnNlciB7CiBwdWJsaWM6Ci0gICAgQnl0ZUNvZGVQYXJzZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR3JhcGgmIGdyYXBoKQor
ICAgIEJ5dGVDb2RlUGFyc2VyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgR3JhcGgmIGdyYXBoKQogICAgICAg
ICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVC
bG9jaykKKyAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAgICAg
LCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCiAgICAgICAgICwg
bV9wYXJzZUZhaWxlZChmYWxzZSkKQEAgLTY1LDYgKzY2LDkgQEAgcHVibGljOgogICAgICAgICAs
IG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAg
ICB7CisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAgICBBU1NFUlQobV9w
cm9maWxlZEJsb2NrKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIFBhcnNlIGEgZnVsbCBDb2Rl
QmxvY2sgb2YgYnl0ZWNvZGUuCkBAIC00MjEsOCArNDI1LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CiAgICAgICAgIE5vZGVJbmRleCBjYWxs
ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhQcmVkaWN0
Tm9uZSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICBpZiAoaW50ZXJwcmV0
ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRf
cmVzdWx0KQorICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAgICBzZXQo
cHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgICAgIGR5bmFtaWNh
bGx5UHJlZGljdChjYWxsLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCkp
OworICAgICAgICB9CiAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAg
bV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFy
Z0NvdW50OwogICAgICAgICByZXR1cm4gY2FsbDsKQEAgLTQ2Miw5ICs0NjgsMzIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoIW1fcmV1c2FibGVOb2RlU3RhY2su
aXNFbXB0eSgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBkeW5hbWljYWxseVByZWRpY3QoTm9k
ZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICB7CisjaWYgRU5B
QkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUg
PSBtX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBBU1NFUlQocHJvZmlsZSk7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICAgICAgcHJpbnRmKCJEeW5hbWljIHByZWRpY3Rpb24gWyV1LCAldV06ICIsIG5vZGVJbmRl
eCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAg
ICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVk
aWN0KG1ha2VQcmVkaWN0aW9uKCptX2dsb2JhbERhdGEsICpwcm9maWxlKSwgRHluYW1pY1ByZWRp
Y3Rpb24pOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7CisgICAgICAg
IFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICB2
b2lkIGR5bmFtaWNhbGx5UHJlZGljdChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgZHluYW1pY2FsbHlQcmVkaWN0KG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgpOworICAgIH0K
IAogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3Jh
cGg7CiAKICAgICAvLyBUaGUgY3VycmVudCBibG9jayBiZWluZyBnZW5lcmF0ZWQuCkBAIC01NjMs
NyArNTkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXgpKTsKICAgICAg
ICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsKICAgICAgICAgfQotCisgICAgICAgIAogICAg
ICAgICAvLyBTd2l0Y2ggb24gdGhlIGN1cnJlbnQgYnl0ZWNvZGUgb3Bjb2RlLgogICAgICAgICBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2N1
cnJlbnRJbmRleDsKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3Vy
cmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKQEAgLTg4Myw2ICs5MTIsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIE5vZGVJbmRl
eCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRp
Y3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJv
cGVydHkpKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBnZXRCeVZhbCk7CisgICAgICAgICAgICBkeW5hbWljYWxseVByZWRpY3QoZ2V0QnlWYWwpOwog
ICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRCeVZhbChnZXRCeVZhbCk7CiAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwpAQCAtOTEyLDYgKzk0Miw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRvR3JhcGgoR2V0TWV0aG9kLCBPcEluZm8o
aWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAgICAgICAgc2V0
KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0TWV0aG9kKTsKKyAgICAgICAgICAgIGR5
bmFtaWNhbGx5UHJlZGljdChnZXRNZXRob2QpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRH
ZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50
SW5kZXggKz0gT1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfaWQpOwpAQCAtOTI1LDYgKzk1Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdl
dEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFBy
ZWRpY3ROb25lKSwgYmFzZSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgZ2V0QnlJZCk7CisgICAgICAgICAgICBkeW5hbWljYWxseVByZWRpY3QoZ2V0
QnlJZCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV9pZCk7CkBAIC0xMzUwLDcgKzEzODIsNyBA
QCBib29sIHBhcnNlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXRhKiBnCiAgICAgVU5VU0VEX1BB
UkFNKGNvZGVCbG9jayk7CiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gQnl0
ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBncmFwaCkucGFyc2UoKTsKKyAgICBy
ZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCksIGdyYXBoKS5wYXJzZSgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgorI2luY2x1ZGUgIkRGR0pJVENv
bXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBD
b21waWxlT3RoZXIgfTsKK2lubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0
Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CisgICAgR3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERh
dGEsIGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoY29t
cGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQorICAgICAgICBkZmcucHJlZGljdEFyZ3VtZW50
VHlwZXMoY2FsbGVlQXJnc0V4ZWMsIGNvZGVCbG9jayk7CisgICAgCisgICAgcHJvcGFnYXRlKGRm
ZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBKSVRDb21waWxlciBkYXRhRmxv
d0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CisgICAgaWYgKGNvbXBpbGVNb2RlID09
IENvbXBpbGVGdW5jdGlvbikgeworICAgICAgICBBU1NFUlQoaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklULmNvbXBpbGVGdW5jdGlvbihqaXRDb2Rl
LCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
Y29tcGlsZU1vZGUgPT0gQ29tcGlsZU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZShqaXRD
b2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdHJ5Q29tcGlsZShFeGVj
U3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlKQorewor
ICAgIHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywgMCwgY29kZUJsb2NrLCBqaXRD
b2RlLCAwKTsKK30KKworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBF
eGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYg
aml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCit7
CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjYWxsZWVBcmdzRXhl
YywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdEcml2ZXJfaAorI2RlZmluZSBERkdEcml2ZXJfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBKSVRDb2RlOworY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OworCituYW1lc3BhY2UgREZHIHsKKworI2lmIEVOQUJMRShERkdfSklUKQorYm9vbCB0cnlDb21w
aWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKTsKK2Jvb2wgdHJ5Q29tcGlsZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayos
IEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjayk7
CisjZWxzZQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBK
SVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIHRyeUNvbXBpbGVGdW5jdGlv
bihFeGVjU3RhdGUqLCBFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMCBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgfQogICAgIGlmIChvcCA9PSBK
U0NvbnN0YW50KSB7CiAgICAgICAgIHByaW50ZigiJXMkJXUiLCBoYXNQcmludGVkID8gIiwgIiA6
ICIiLCBub2RlLmNvbnN0YW50TnVtYmVyKCkpOworICAgICAgICBpZiAoY29kZUJsb2NrKSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxv
Y2spOworICAgICAgICAgICAgcHJpbnRmKCIgPSAlcyIsIHZhbHVlLmRlc2NyaXB0aW9uKCkpOwor
ICAgICAgICB9CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAgKG5v
ZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7CkBAIC0xODYsMTcgKzE5MCw0NyBAQCB2
b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiAgICAgfQogfQogCi12b2lkIEdy
YXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEdyYXBoOjpw
cmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkpOwot
Ci0gICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJn
KSB7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZyAt
IDEpOwotICAgICAgICBpZiAoYXJndW1lbnRWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICBt
X2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKLSAgICAg
ICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgbV9hcmd1
bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVkaWN0RG91YmxlOworICAgIGlmIChl
eGVjKSB7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWluKGV4ZWMt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXpl
KCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgbnVtYmVy
T2ZBcmd1bWVudHM7ICsrYXJnKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50VmFsdWUg
PSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudFZhbHVl
LmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5t
X3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50VmFs
dWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJn
XS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisjaWYg
RU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIEFTU0VSVChjb2RlQmxvY2spOworICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKTsKKworICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIEFTU0VSVChjb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycyA+PSAxKTsKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKTsgKythcmcpIHsK
KyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2stPnZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBw
cmludGYoIkFyZ3VtZW50IHByb2ZpbGUgWyVsdV06ICIsIGFyZyk7CisgICAgICAgIHByb2ZpbGUt
PmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIAor
ICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1
ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2ZpbGUpKTsKKyAgICAgICAgCisjaWYg
REZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIs
IHByZWRpY3Rpb25Ub1N0cmluZyhtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlKSk7
CisjZW5kaWYKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworI2Vu
ZGlmCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw5IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPFJlZ2lzdGVyRmlsZS5oPgotI2luY2x1ZGUg
PGRmZy9ERkdOb2RlLmg+CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHTm9k
ZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
QEAgLTEzNSwxMiArMTM2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2Jsb2Nrc1ti
bG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0KIAotICAg
IHZvaWQgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVk
aWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIHVuc2ln
bmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkgKyBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50
XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVQ
cmVkaWN0aW9ucy5zaXplKCkpIHsKQEAgLTE0OCwzNyArMTQ4LDM3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fdmFyaWFibGVQcmVkaWN0aW9ucy5yZXNpemUob3BlcmFuZCArIDEpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZVByZWRpY3Rp
b25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVQcmVkaWN0aW9uc1tv
cGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwg
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBi
b29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgSGFzaE1h
cDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9iYWxWYXJQ
cmVkaWN0aW9ucy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAgICBpZiAoaXRlciA9PSBtX2ds
b2JhbFZhclByZWRpY3Rpb25zLmVuZCgpKSB7CiAgICAgICAgICAgICBQcmVkaWN0aW9uU2xvdCBw
cmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uU2xv
dC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFsdWUs
IG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgICAgICAgICAgbV9nbG9i
YWxWYXJQcmVkaWN0aW9ucy5hZGQodmFyTnVtYmVyICsgMSwgcHJlZGljdGlvblNsb3QpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtZXJn
ZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rp
b24sIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5z
ZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChOb2RlJiBu
b2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6
Ci0gICAgICAgICAgICBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbiwgc291cmNlKTsK
KyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbiwgc291
cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAg
ICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwg
c291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RH
bG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAg
Y2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAg
ICAgICAgIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgcmV0
dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTIyNiwxMiArMjI2LDQzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biBQcmVkaWN0Tm9uZTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvLyBIZWxwZXIgbWV0
aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgorICAgIGJvb2wgaXNDb25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCku
aXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNDb25zdGFudCgp
OworICAgIH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgp
LmlzSW50MzJDb25zdGFudChjb2RlQmxvY2spOworICAgIH0KKyAgICBib29sIGlzRG91YmxlQ29u
c3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jayk7
CisgICAgfQorICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBu
b2Rlcy4KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2Nr
LCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRl
eCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgaW50MzJfdCB2YWx1
ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZJbnQzMkNvbnN0
YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKTsK
KyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9wTmFtZShO
b2RlVHlwZSk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0
YXRlKik7CisgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqKTsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAg
ICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTQ0ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTEzLDYgKzkxMyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxs
TGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxsID0gbV9qc0NhbGxzW2ldLm1faXNDYWxs
OworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9j
YXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxz
W2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8u
aG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ld
Lm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNywzOSArMjA3LDE0IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29u
c3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGdyYXBoKClbbm9kZUluZGV4XS5pc0NvbnN0YW50KCk7Ci0gICAgfQot
ICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAg
ICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9v
bCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5k
ZXgpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNKU0NvbnN0YW50KG5vZGVJbmRl
eCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051bWJlcigpOwotICAgIH0KKyAg
ICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5p
c0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlNDb25zdGFudChub2RlSW5kZXgpOyB9Cisg
ICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3Jh
cGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBib29s
IGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5p
c0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAgICAgLy8gSGVscGVy
IG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFsdWUgdmFs
dWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5k
ZXggPSBncmFwaCgpW25vZGVJbmRleF0uY29uc3RhbnROdW1iZXIoKTsKLSAgICAgICAgcmV0dXJu
IGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ICsgY29uc3RhbnRJbmRleCkuZ2V0KCk7Ci0gICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMy
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0lu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpLmFzSW50MzIoKTsKLSAgICB9Ci0gICAgZG91YmxlIHZhbHVlT2ZEb3VibGVD
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRG91
YmxlQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAgIH0KKyAgICBKU1ZhbHVlIHZh
bHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBpbnQzMl90IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCku
dmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBkb3Vi
bGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdy
YXBoKCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNo
ZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBERkdfSklUX0FTU0VSVApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDkgQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTk1LDYgKzE5
OCw3IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RBcnJheSAKIHN0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Owogc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RUb3AgICAgPSAweDBmOwogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgRHluYW1pY1By
ZWRpY3Rpb25UYWcgPSAweDgwOwogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlv
blRhZ01hc2sgICAgPSAweDgwOwogCkBAIC0yMDIsNyArMjA2LDcgQEAgZW51bSBQcmVkaWN0aW9u
U291cmNlIHsgU3RhdGljUHJlZGljdGlvbgogCiBpbmxpbmUgYm9vbCBpc0NlbGxQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxs
KSA9PSBQcmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgflByZWRpY3RBcnJheSk7CisgICAgcmV0dXJu
ICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgfihQcmVk
aWN0QXJyYXkgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwogfQogCiBpbmxpbmUgYm9vbCBpc0FycmF5
UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjIyLDcgKzIyNiw3IEBAIGlubGlu
ZSBib29sIGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0ZWQKIAogaW5saW5lIGJvb2wgaXNOdW1i
ZXJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICEhKHZhbHVl
ICYgUHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH5QcmVkaWN0TnVtYmVyKTsKKyAgICByZXR1
cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZhbHVlICYgfihQcmVkaWN0TnVtYmVy
IHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0KIAogaW5saW5lIGJvb2wgaXNEeW5hbWljUHJlZGlj
dGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjMxLDYgKzIzNSw0MiBAQCBpbmxpbmUgYm9v
bCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlCiAgICAgcmV0dXJuICEhKHZhbHVlICYgRHlu
YW1pY1ByZWRpY3Rpb25UYWcpOwogfQogCisjaWZuZGVmIE5ERUJVRworaW5saW5lIGNvbnN0IGNo
YXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIGlmIChp
c0R5bmFtaWNQcmVkaWN0aW9uKHZhbHVlKSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflBy
ZWRpY3Rpb25UYWdNYXNrKSB7CisgICAgICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAgICAg
ICByZXR1cm4gInAtZHluLWJvdHRvbSI7CisgICAgICAgIGNhc2UgUHJlZGljdENlbGw6CisgICAg
ICAgICAgICByZXR1cm4gInAtZHluLWNlbGwiOworICAgICAgICBjYXNlIFByZWRpY3RBcnJheToK
KyAgICAgICAgICAgIHJldHVybiAicC1keW4tYXJyYXkiOworICAgICAgICBjYXNlIFByZWRpY3RJ
bnQzMjoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4taW50MzIiOworICAgICAgICBjYXNlIFBy
ZWRpY3ROdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLW51bWJlciI7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLXRvcCI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAg
IHJldHVybiAicC1zdGF0LWJvdHRvbSI7CisgICAgY2FzZSBQcmVkaWN0Q2VsbDoKKyAgICAgICAg
cmV0dXJuICJwLXN0YXQtY2VsbCI7CisgICAgY2FzZSBQcmVkaWN0QXJyYXk6CisgICAgICAgIHJl
dHVybiAicC1zdGF0LWFycmF5IjsKKyAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgcmV0
dXJuICJwLXN0YXQtaW50MzIiOworICAgIGNhc2UgUHJlZGljdE51bWJlcjoKKyAgICAgICAgcmV0
dXJuICJwLXN0YXQtbnVtYmVyIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gInAtc3Rh
dC10b3AiOworICAgIH0KK30KKyNlbmRpZgorCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtZXJnZVBy
ZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKICAg
ICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSA9PSBpc0R5bmFtaWNQcmVkaWN0aW9uKHJp
Z2h0KSkKQEAgLTI0NSw5ICsyODUsMTIgQEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVk
aWN0aW9ucyhQcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgbWVyZ2VQ
cmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQpCitpbmxpbmUgYm9vbCBtZXJn
ZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKLSAgICBsZWZ0ID0g
c3RhdGljX2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBl
PihsZWZ0KSwgcmlnaHQpKTsKKyAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBzdGF0
aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KGxl
ZnQpLCByaWdodCkpOworICAgIGJvb2wgcmVzdWx0ID0gbmV3UHJlZGljdGlvbiAhPSBzdGF0aWNf
Y2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KTsKKyAgICBsZWZ0ID0gbmV3UHJlZGljdGlvbjsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlv
bihQcmVkaWN0ZWRUeXBlIHR5cGUsIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQpAQCAtMjU5LDIz
ICszMDIsMzEgQEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oUHJlZAogICAg
IHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlvbiA/IER5bmFtaWNQcmVk
aWN0aW9uVGFnIDogMCk7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1pbmxpbmUgY29uc3QgY2hhciog
cHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCisjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQoraW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUpCiB7Ci0gICAgc3dp
dGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0gICAgICAgIHJldHVybiAicC1i
b3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgIHJldHVybiAicC1jZWxsIjsK
LSAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgcmV0dXJuICJwLWFycmF5IjsKLSAgICBj
YXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJwLWludDMyIjsKLSAgICBjYXNlIFBy
ZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC1udW1iZXIiOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAicC10b3AiOwotICAgIH0KKyAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3Rp
Y3Mgc3RhdGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEs
IHN0YXRpc3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAg
ICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3Rh
dGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHluYW1pY1ByZWRpY3Rpb25UYWcgfCBQ
cmVkaWN0RG91YmxlOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmludDMycyArIHN0YXRpc3Rp
Y3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBEeW5hbWlj
UHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3Mu
YXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5bmFtaWNQcmVk
aWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmNlbGxz
ID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9u
VGFnIHwgUHJlZGljdENlbGw7CisgICAgCisgICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdFRvcDsKIH0KICNlbmRpZgogCkBAIC0zNTYsNiArNDA3LDMzIEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7CiAgICAgICAgIHJldHVybiBtX29w
SW5mbzsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNvbnN0YW50
UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudE51bWJlcigpKS5n
ZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZK
U0NvbnN0YW50KGNvZGVCbG9jaykuaXNJbnQzMigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
RG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1
cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNOdW1iZXIo
KTsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoY29k
ZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmFz
SW50MzIoKTsKKyAgICB9CisKKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29uc3RhbnQo
Y29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2sp
LnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIH0KIAogICAgIGJvb2wgaGFzTG9jYWwoKQogICAg
IHsKQEAgLTQ3MCw3ICs1NDgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihtX29wSW5mbzIpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJj
ZSkKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9u
U291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNQcmVkaWN0aW9uKCkpOwog
ICAgICAgICAKQEAgLTQ3OCwxNiArNTU2LDE5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLy8g
dG8gaGVhcCBsb2FkcyBhcyB3ZWxsIGFzIGNhbGxzIGlzIG5vdCBwcm9maXRhYmxlLCBhcyB0aGVz
ZSBwcmVkaWN0aW9ucwogICAgICAgICAvLyBhcmUgd3JvbmcgdG9vIG9mdGVuLiBIZW5jZSwgdGhp
cyBjb21wbGV0ZWx5IGlnbm9yZXMgc3RhdGljIHByZWRpY3Rpb25zLgogICAgICAgICBpZiAoc291
cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVk
aWN0Tm9uZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgICAgIEFTU0VSVChzb3VyY2UgPT0gRHluYW1pY1ByZWRpY3Rpb24pOwog
ICAgICAgICAKLSAgICAgICAgbV9vcEluZm8yIHw9IER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgcHJl
ZGljdGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gRHluYW1pY1By
ZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOworICAgICAgICBib29sIHJlc3VsdCA9IG1fb3BJbmZv
MiAhPSBuZXdQcmVkaWN0aW9uOworICAgICAgICBtX29wSW5mbzIgfD0gbmV3UHJlZGljdGlvbjsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRpb24u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHUHJvcGFnYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKSAmJiBFTkFCTEUoRFlOQU1J
Q19PUFRJTUlaQVRJT04pCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByb3BhZ2F0b3IgeworcHVibGljOgorICAgIFBy
b3BhZ2F0b3IoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2spCisgICAgICAgIDogbV9ncmFw
aChncmFwaCkKKyAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVk
QmxvY2spCisgICAgeworICAgICAgICBtX3ByZWRpY3Rpb25zLnJlc2l6ZShtX2dyYXBoLnNpemUo
KSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0Tm9uZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaXhwb2ludCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisg
ICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8v
IEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2Fs
bHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2RlLgorICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Cisg
ICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUg
bGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAgICAgIC8vIGNh
dXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFj
a3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6
ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAgICAvLyBm
b3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxv
dy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRl
QmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEbyBhbm90aGVyIGZvcndhcmQg
cGFzcyBiZWNhdXNlIGZvcndhcmQgcGFzc2VzIGFyZSBvbiBhdmVyYWdlIG1vcmUKKyAgICAgICAg
ICAgIC8vIHByb2ZpdGFibGUuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBp
bGVJbmRleF0gPT0gcHJlZGljdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID0gcHJlZGljdGlvbjsKKyAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZVByZWRpY3Rp
b24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKERGRzo6bWVy
Z2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdLCBwcmVkaWN0aW9uKSkK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJv
cGFnYXRlTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBOb2RlVHlw
ZSBvcCA9IG5vZGUub3A7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBKU0Nv
bnN0YW50OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25z
dGFudChtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUo
KSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RE
b3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJm1fZ2xvYmFsRGF0YSwgY2VsbCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEFy
cmF5LCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgRHlu
YW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgRHluYW1pY1ByZWRpY3Rpb24p
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CisgICAgICAgICAgICBpZiAoaXNE
eW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8
PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQx
KCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBEeW5hbWljUHJlZGljdGlvbik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5kOgor
ICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBC
aXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hp
ZnQ6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1
ZVRvTnVtYmVyOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX3By
ZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIGlmIChp
c051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgICAgIG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVtYmVyLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGls
ZDIoKV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9u
KGxlZnQpICYmIGlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVByZWRp
Y3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRpY3Rpb24p
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVk
aWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIER5bmFtaWNQcmVkaWN0aW9uKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0
ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkgJiYgaXNEeW5hbWljUHJlZGljdGlvbihy
aWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24obWVyZ2VQcmVk
aWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90Ogor
ICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJF
cToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVx
OgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc2Fk
LCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVkaWN0aW9uLCBldmVuIHRob3VnaCB3ZSBl
YXNpbHkKKyAgICAgICAgICAgIC8vIGNvdWxkLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbiht
YWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5SWQ6
CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAg
ICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7CisgICAgICAgICAgICBpZiAo
aXNEeW5hbWljUHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIER5
bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZS52
YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0
R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xv
YmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+
UHJlZGljdGlvblRhZ01hc2ssIER5bmFtaWNQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIC8vIFRo
ZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCisgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAg
Y2FzZSBERkc6Okp1bXA6CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFJldHVy
bjoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Cisg
ICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBi
ZWNhdXNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIGZvciB0aGVtLCB5ZXQuCisgICAgICAgIGNh
c2UgUmVzb2x2ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgY2FzZSBSZXNv
bHZlQmFzZVN0cmljdFB1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
I2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVGb3J3YXJk
KCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdh
dGluZyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yICht
X2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9j
b21waWxlSW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVCYWNrd2FyZCgpCisgICAg
eworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiUHJvcGFnYXRpbmcgYmFj
a3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKG1fY29tcGls
ZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykKKyAgICAgICAg
ICAgIHByb3BhZ2F0ZU5vZGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0KKyAgICAK
KyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKKyAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2Nr
OworICAgIAorICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICAKKyAgICBWZWN0b3I8
UHJlZGljdGVkVHlwZSwgMTY+IG1fcHJlZGljdGlvbnM7CisKKyNpZiBERkdfREVCVUdfVkVSQk9T
RQorICAgIHVuc2lnbmVkIG1fY291bnQ7CisjZW5kaWYKKyAgICAKKyAgICBib29sIG1fY2hhbmdl
ZDsKK307CisKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsK
KyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7
CisgICAgQVNTRVJUKHByb2ZpbGVkQmxvY2spOworICAgIAorICAgIFByb3BhZ2F0b3IgcHJvcGFn
YXRvcihncmFwaCwgKmdsb2JhbERhdGEsIGNvZGVCbG9jaywgcHJvZmlsZWRCbG9jayk7CisgICAg
cHJvcGFnYXRvci5maXhwb2ludCgpOworICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAg
Z3JhcGguZHVtcChjb2RlQmxvY2spOworI2VuZGlmCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBFTkFCTEUoRFlOQU1JQ19PUFRJ
TUlaQVRJT04pCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wYWdhdGlvbl9oCisj
ZGVmaW5lIERGR1Byb3BhZ2F0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSA8ZGZnL0RGR0dyYXBoLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7
CitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVzcGFjZSBERkcgeworCisvLyBQcm9wYWdhdGUg
ZHluYW1pYyBwcmVkaWN0aW9ucyBmcm9tIHZhbHVlIHNvdXJjZXMgdG8gdmFyaWFibGVzLgorI2lm
IEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNH
bG9iYWxEYXRhKiwgQ29kZUJsb2NrKik7CisjZWxzZQoraW5saW5lIHZvaWQgcHJvcGFnYXRlKEdy
YXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKikgeyB9CisjZW5kaWYKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1
OTMsOSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGluCiAgICAgICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlua0luZm8u
Y2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5m
by5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3Ro
ZXIsIGNvZGVQdHIpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAg
ICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbCgmY2FsbExpbmtJbmZv
KTsKICAgICB9CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDk0NDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTgsNiArMjE4LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVh
cAogICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXApCiAgICAgLCBtX3dlYWtPd25lcigwKQog
ICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4
dCgwKQogewogfQogCkBAIC0yMjUsNiArMjI3LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6
Ok5vZGUoV1RGOjpTZW50aQogICAgIDogbV9oYW5kbGVIZWFwKDApCiAgICAgLCBtX3dlYWtPd25l
cigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAs
IG1fbmV4dCgwKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNiArOTMsMTYgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlQgogewogfQogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKK3ZvaWQg
SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kIGtpbmQpCit7
CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0z
MihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IDEgOiAzMCksIEFic29sdXRlQWRkcmVz
cygmbV9jb2RlQmxvY2stPm1fZXhlY3V0ZUNvdW50ZXIpKTsKKyAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IGN0aV9vcHRpbWl6ZV9m
cm9tX2xvb3AgOiBjdGlfb3B0aW1pemVfZnJvbV9yZXQpOworICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKK30KKyNlbmRpZgorCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKIHsKQEAgLTEwMiw2ICsxMTIs
OCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc3R1YkNhbGwuY2FsbCh0aW1l
b3V0Q2hlY2tSZWdpc3Rlcik7CiAgICAgc3R1YkNhbGwuZ2V0QXJndW1lbnQoMCwgcmVnVDEsIHJl
Z1QwKTsgLy8gcmVsb2FkIGxhc3QgcmVzdWx0IHJlZ2lzdGVycy4KICAgICBza2lwVGltZW91dC5s
aW5rKHRoaXMpOworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0
aW9uQ2hlY2spOwogfQogI2Vsc2UKIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKQEAgLTEx
MSw2ICsxMjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiAgICAgc2tpcFRpbWVv
dXQubGluayh0aGlzKTsKIAogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAKKyAg
ICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKIH0KICNlbmRp
ZgogCkBAIC02MjMsNyArNjM3LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQ
dHIqIGZ1bgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0
eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLQorICAgIAogICAg
IHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiB9CiAKQEAgLTYzNyw2ICs2NTEsOSBAQCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1
bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtl
ZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxs
TGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5o
b3RQYXRoT3RoZXIsIGNvZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9j
aykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsTGlu
a0luZm8pOwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250
aW51ZSB0byB0cnkgdG8gbGluay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NzIsNiArOTcyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBMb2Fk
cyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcgaW50byBk
c3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpOwogICAgICAgICAKKyAgICAgICAg
ZW51bSBPcHRpbWl6YXRpb25DaGVja0tpbmQgeyBMb29wT3B0aW1pemF0aW9uQ2hlY2ssIFJldE9w
dGltaXphdGlvbkNoZWNrIH07CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAg
ICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kKTsKKyNl
bHNlCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNr
S2luZCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIHZvaWQgZW1pdFRpbWVvdXRDaGVj
aygpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5
cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Niw2ICsxMDYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFZhcmFyZ3NTbG93Q2FzZShJCiAK
IHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAg
CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAog
ICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTExOCw2ICsxMjAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29w
X3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAg
ICB1bnNpZ25lZCB0aGlzUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDk0NDg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIzICsyNyw1MCBAQAogI2RlZmluZSBKSVRDb2RlX2gKIAogI2lmIEVOQUJMRShKSVQpCi0KICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXIuaCIKKyNlbmRpZgogCiBu
YW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRh
OwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKKyNlbmRpZgogICAgIAogICAgIGNsYXNzIEpJVENv
ZGUgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQ
dHI7CisjZWxzZQorICAgICAgICBKSVRDb2RlKCkgeyB9CisjZW5kaWYKICAgICBwdWJsaWM6CiAg
ICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQg
fTsKLQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCisg
ICAgICAgIHsKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICAgICAgcmV0
dXJuIEJhc2VsaW5lSklUOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisjZW5k
aWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJ
VCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqaXRUeXBlLCBqaXRUeXBl
ID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0gREZHSklUKTsKKyAgICAgICAgICAgIHJldHVy
biBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
SklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNTMsNyArODAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAg
ICAgICAgfQotCisgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yICEoKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpOwpAQCAtMTI0LDEwICsxNTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBDb2Rl
UmVmIG1fcmVmOwogICAgICAgICBKSVRUeXBlIG1faml0VHlwZTsKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQogICAgIH07CiAKIH07CiAKICNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIs
NiArNDUyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKElucwogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAog
ICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7CiAgICAgQVNTRVJUKHJlZ1Qx
ICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVy
ICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQ3Miw2ICs0NzQsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3JldF9vYmpl
Y3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRP
cHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgQVNTRVJU
KGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJu
VmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZy
YW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiArMTgxNiwzMiBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcF9jaGVja19oYXNfCiAgICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgp
OwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX2xvb3ApCit7
CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJy
b3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsK
KyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1p
emVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKK30KKworREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9yZXQpCit7CisgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1l
LT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBp
bGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20g
cmV0IGZhaWxlZC5cbiIpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfaW5zdGFuY2VvZikKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NDQ4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIzLDYgKzQyMyw4IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3Rp
X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lk
IEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX2xv
b3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6
ZV9mcm9tX3JldChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0
aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBK
SVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9qaXRDb21waWxlKFNUVUJfQVJHU19E
RUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjYgKzI4LDE2IEBACiAK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlBhcnNl
ci5oIgogI2luY2x1ZGUgIlVTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgotI2lu
Y2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBFeGVjdXRhYmxlQmFzZTo6c19pbmZvID0geyAiRXhlY3V0YWJsZSIsIDAs
IDAsIDAgfTsKIAotI2lmIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMg
Ym9vbCB0cnlERkdDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvZGUmIGppdENvZGUpCi17Ci0jaWYgRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQot
ICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVy
IHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFyZ2V0cy4KLSAg
ICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0KLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIERGRzo6R3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIERGRzo6SklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZ2xvYmFsRGF0
YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFGbG93SklULmNvbXBpbGUoaml0Q29kZSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGVGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVX
aXRoQXJpdHlDaGVjaykKLXsKLSNpZiBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0gICAg
Ly8gRklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQgc3VwcG9ydGVkLCBkb24ndCBib3RoZXIgc2Nh
bm5pbmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBhbnkganVtcCB0YXJnZXRzLgotICAgIGlm
IChjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9OUykKLQotICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgREZHOjpHcmFwaCBk
ZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKLSAg
ICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGNhbGxlZUFyZ3NFeGVjKQotICAgICAgICBkZmcucHJlZGljdEFy
Z3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMpOwotCi0gICAgREZHOjpKSVRDb21waWxlciBkYXRh
Rmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7Ci0gICAgZGF0YUZsb3dKSVQuY29t
cGlsZUZ1bmN0aW9uKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHRyeURGR0Nv
bXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpIHsgcmV0dXJuIGZhbHNlOyB9
Ci1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKLSAgICAKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZSgpCiB7CiAjaWYgRU5BQkxF
KEpJVCkKQEAgLTE2Niw4ICsxMTYsMTggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4
ZWN1dGFibGUoRQogewogfQogCitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7
CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAg
ICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Cisg
ICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJK
SVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7
CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAK
LUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEV2YWxFeGVjdXRh
YmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwpAQCAtMTgzLDI2ICsxNDMsNDEgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxl
Ojpjb21waWxlSW50ZXJuYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1fZXZhbENv
ZGVCbG9jayk7Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxv
Y2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9k
ZS0+bG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0
b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNo
YWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2su
Z2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2
YWxDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpi
b3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9ldmFsQ29kZUJs
b2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3Vy
Y2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0Nv
ZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVy
YXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3Bl
Q2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9j
ay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVy
YXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29t
cGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkp
KSB7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay5jbGVhcigpOworICAgICAgICBtX2V2YWxDb2Rl
QmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9j
ay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEo
KTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBldmFsTm9kZS0+ZGVz
dHJveURhdGEoKTsKKyAgICBtX2V2YWxDb2RlQmxvY2stPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZl
KCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNl
SklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGUoZXhlYywg
bV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgaWYgKCFk
ZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICBp
ZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21waWxlZCA9
IERGRzo6dHJ5Q29tcGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZv
ckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpCisgICAgICAgICAgICBBU1NFUlQoIW1f
ZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSB8fCAhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5oYXNJbmNvbWluZ0NhbGxzKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0aXZlIHBpZWNlIG9mIGNvZGUgY29tcGlsZWQg
d2l0aCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIC8vIEpJVCwgc28gd2UgY2FuIHNpbGVu
dGx5IGZhaWwuCisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2
ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5n
bG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpOworICAgICAgICB9CiAjaWYgIUVOQUJM
RShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBz
R2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kaXNjYXJkQnl0
ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBtX2V2YWxDb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgog
CkBAIC0yNjEsMTAgKzIzNiwxOSBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNr
U3ludGF4CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVj
dXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRp
bWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7
Ci0gICAgQVNTRVJUKCFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIEFTU0VSVChleGVjLT5nbG9i
YWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29k
ZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX3Byb2dyYW1Db2Rl
QmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVy
cm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0
VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCgh
IW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOworfQogCitKU09iamVjdCog
UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQorewog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0yNzcsMjUgKzI2MSw0
MCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5n
ZXQoKTsKICAgICAKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3Jh
bUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3Zp
ZGVyKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0
cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2Rl
LCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkp
KSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1D
b2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0
b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9wcm9ncmFtQ29kZUJs
b2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNl
KCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAm
Z2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksICEh
bV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9w
dGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9u
KSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAg
ICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJs
b2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2Rl
QmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ry
b3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCiAgICAgcHJvZ3Jh
bU5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5RGF0YUZy
b21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFs
RGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdD
b21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7
Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBm
YWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAg
ICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgbV9wcm9ncmFtQ29kZUJsb2Nr
LmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7Cisg
ICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgICAg
ICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21p
bmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcHJvZ3JhbUNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVC
bG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29k
ZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9wcm9ncmFt
Q29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJ
VDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2Nr
LmdldCgpKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAg
ICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAg
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMzQyLDcgKzM0MSwyOSBA
QCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGUoKQogICAgIEJhc2U6OmNsZWFyQ29k
ZSgpOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbElu
dGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBF
eGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpCit7CisgICAgQVNTRVJU
KGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFt
X2NvZGVCbG9ja0ZvckNhbGwpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1f
Y29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkK
KyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JD
YWxsLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwor
ICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFt
aWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsK
KyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3Ig
PSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENv
ZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBlKCkpKTsK
KyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGVycm9y
OworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVy
bmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAg
SlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
c2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CkBAIC0zNTgsMTEgKzM3OSwxMiBAQCBKU09iamVj
dCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAg
IEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBh
ZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxP
YmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNl
KSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3
IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9j
a0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSkpKTsKKyAg
ICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ2Fs
bC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBh
ZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxP
YmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNl
LCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQo
KSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9j
b2RlQmxvY2tGb3JDYWxsLmdldCgpLCAhIW1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUo
KSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdl
bmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVy
YXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7
CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rp
b25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwog
ICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwog
ICAgIH0KQEAgLTM3MywxNyArMzk1LDMxIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFy
ZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2NvZGVC
bG9ja0ZvckNhbGwtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9v
bCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGVGdW5jdGlvbihleGVjLCBjYWxsZWVBcmdzRXhl
YywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAg
ICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENv
ZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlRnVu
Y3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9q
aXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAg
aWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5h
bHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJu
YXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAg
ICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5z
aGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNo
YWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLQorICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVk
Q29kZSgpKQogICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5kaXNjYXJkQnl0ZWNvZGUo
KTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5zZXRKSVRD
b2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CiAg
ICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY2FsbGVlQXJnc0V4ZWMpOwpAQCAtNDAzLDgg
KzQzOSwxMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAg
cmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogeworICAgIFVOVVNFRF9QQVJBTShqaXRUeXBl
KTsKKyAgICAKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKICAgICBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25C
b2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9w
YXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNl
Tm9ybWFsLCAmZXhjZXB0aW9uKTsKQEAgLTQxOSwxMSArNDU3LDEyIEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJU
KCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qg
PSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9i
YWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRy
dWUpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5n
ZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklU
Q29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMs
IEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2Uo
KS5zdGFydE9mZnNldCgpLCB0cnVlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgISFt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9y
OjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxh
dGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsK
LSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKKyAgICAgICAgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2Nr
PihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAg
ICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0K
QEAgLTQzNCwxNCArNDczLDMwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJl
ZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOworICAgIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAg
IG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xv
YmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCksICZtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsK
KyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSBjb25zdHJ1Y3Rv
cnMgd2l0aCBERkcuCisgICAgICAgIGlmIChkZmdDb21waWxlZCkgeworICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0Nh
bGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Cisg
ICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5z
aGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwg
Jm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgfQogI2lmICFF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpk
dW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk0NDg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDYsMTAgKzMwNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAg
ICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxv
Y2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVD
aGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMs
IHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKICAgICAgICAgRXZhbENvZGVC
bG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zNDQsNyArMzQ2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNl
Q29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5h
bChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lk
IHVubGlua0NhbGxzKCk7CiAKQEAgLTM2OSwxMSArMzcxLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1f
cHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5h
bChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxl
SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisKICAgICAgICAg
UHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKQEAgLTQwMyw3ICs0MDcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZs
YWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VD
b2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdW5saW5r
Q2FsbHMoKTsKIApAQCAtNDUwLDExICs0NTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxv
Y2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5h
bChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMpOworICAgICAgICAgICAgICAg
IGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2Fs
bGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKICAgICAgICAgICAgIHJldHVybiBl
cnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9y
Q2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4
ZWMgPSAwKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CkBAIC00NzEsMTEg
KzQ3NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9i
YWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJy
b3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKLSAgICAg
ICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29w
ZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qp
OwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKKyAgICAgICAgSlNPYmpl
Y3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwpAQCAt
NTAxLDYgKzUwOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb21w
aWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgfQogICAgICAg
ICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVj
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY29tcGlsZU9wdGltaXplZEZvciBzaG91
bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhIGNhbGxmcmFtZSBzZXQgdXAgdG8gY2FsbCB0aGlzIGZ1
bmN0aW9uLAorICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCBtYWtlIHNwZWN1bGF0aXZlIG9w
dGltaXphdGlvbnMgYmFzZWQgb24gdGhlIGFyZ3VtZW50cy4KKyAgICAgICAgICAgIEFTU0VSVChl
eGVjLT5jYWxsZWUoKSk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVy
aXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAgICAgICAgICAgIEFTU0VSVChhc0Z1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgIHJl
dHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29wZUNoYWluTm9kZSwgZXhlYyk7
CisgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAg
ICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQpAQCAtNTQ5LDggKzU3MSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiwgY29uc3QgSWRlbnRpZmll
ciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5j
dGlvblBhcmFtZXRlcnMqLCBib29sKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZv
cmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAKLSAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKTsKLSAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUpOwor
ICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSos
IFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVk
IG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjAsMTEgKzk2MCwyMyBAQAogI2RlZmlu
ZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9USUVSRURf
Q09NUElMQVRJT04pICYmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBFTkFCTEVfVElFUkVEX0NP
TVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3Ig
SlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCiAjaWYgIWRlZmluZWQo
RU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0KSAm
JiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9WQUxVRV9QUk9GSUxFUiAwCiAjZW5kaWYK
IAorI2lmICFkZWZpbmVkKEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTikKKyNpZiBFTkFCTEUo
VElFUkVEX0NPTVBJTEFUSU9OKSAmJiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisjZGVmaW5lIEVO
QUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiAxCisjZWxzZQorI2RlZmluZSBFTkFCTEVfRFlOQU1J
Q19PUFRJTUlaQVRJT04gMAorI2VuZGlmCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9W
RVJCT1NFX1ZBTFVFX1BST0ZJTEUpICYmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICNkZWZpbmUg
RU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSAwCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaAkocmV2aXNpb24gOTQ0ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwyNCArNDEsNjMgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGVudW0gU2Vu
dGluZWxUYWcgeyBTZW50aW5lbCB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gY2xhc3Mg
U2VudGluZWxMaW5rZWRMaXN0IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCYXNpY1Jh
d1NlbnRpbmVsTm9kZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBOb2RlKiBpdGVyYXRvcjsKKyAg
ICBCYXNpY1Jhd1NlbnRpbmVsTm9kZShTZW50aW5lbFRhZykKKyAgICAgICAgOiBtX25leHQoMCkK
KyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJhc2ljUmF3U2Vu
dGluZWxOb2RlKCkKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UHJldihCYXNpY1Jhd1NlbnRpbmVsTm9kZSog
cHJldikgeyBtX3ByZXYgPSBwcmV2OyB9CisgICAgdm9pZCBzZXROZXh0KEJhc2ljUmF3U2VudGlu
ZWxOb2RlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KKyAgICAKKyAgICBUKiBwcmV2KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJldik7IH0KKyAgICBUKiBuZXh0KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VCo+KG1fbmV4dCk7IH0KKyAgICAKKyAgICBib29sIGlzT25MaXN0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghIW1fcHJldiA9PSAhIW1fbmV4dCk7CisgICAgICAg
IHJldHVybiAhIW1fcHJldjsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmUoKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUqIG1fbmV4dDsKKyAgICBCYXNpY1Jh
d1NlbnRpbmVsTm9kZSogbV9wcmV2OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFJhd05vZGUgPSBUPiBjbGFzcyBTZW50aW5lbExpbmtlZExpc3QgeworcHVibGljOgorICAg
IHR5cGVkZWYgVCogaXRlcmF0b3I7CiAKICAgICBTZW50aW5lbExpbmtlZExpc3QoKTsKIAotICAg
IHZvaWQgcHVzaChOb2RlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlKE5vZGUqKTsKKyAgICB2
b2lkIHB1c2goVCopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZShUKik7CiAKICAgICBpdGVyYXRv
ciBiZWdpbigpOwogICAgIGl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRlOgotICAgIE5vZGUgbV9o
ZWFkU2VudGluZWw7Ci0gICAgTm9kZSBtX3RhaWxTZW50aW5lbDsKKyAgICBSYXdOb2RlIG1faGVh
ZFNlbnRpbmVsOworICAgIFJhd05vZGUgbV90YWlsU2VudGluZWw7CiB9OwogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6U2VudGluZWxM
aW5rZWRMaXN0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIEJhc2ljUmF3U2VudGluZWxO
b2RlPFQ+OjpyZW1vdmUoKQoreworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxULCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxUPiA+OjpyZW1vdmUoc3RhdGljX2Nhc3Q8VCo+KHRoaXMpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSBTZW50aW5lbExpbmtl
ZExpc3Q8VCwgUmF3Tm9kZT46OlNlbnRpbmVsTGlua2VkTGlzdCgpCiAgICAgOiBtX2hlYWRTZW50
aW5lbChTZW50aW5lbCkKICAgICAsIG1fdGFpbFNlbnRpbmVsKFNlbnRpbmVsKQogewpAQCAtNjks
MjEgKzEwOCwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsCiAg
ICAgbV90YWlsU2VudGluZWwuc2V0TmV4dCgwKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5v
ZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46Oml0ZXJhdG9yIFNl
bnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6YmVnaW4oKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3
Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6YmVnaW4oKQog
ewotICAgIHJldHVybiBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQqPihtX2hlYWRTZW50aW5lbC5uZXh0KCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6aXRlcmF0b3Ig
U2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjplbmQoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3
Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6ZW5kKCkKIHsK
LSAgICByZXR1cm4gJm1fdGFpbFNlbnRpbmVsOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4o
Jm1fdGFpbFNlbnRpbmVsKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB2
b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cHVzaChOb2RlKiBub2RlKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2Vk
TGlzdDxULCBSYXdOb2RlPjo6cHVzaChUKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKLSAg
ICBOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOwotICAgIE5vZGUqIG5leHQgPSBtX2hlYWRT
ZW50aW5lbC5uZXh0KCk7CisgICAgQVNTRVJUKCFub2RlLT5wcmV2KCkpOworICAgIEFTU0VSVCgh
bm9kZS0+bmV4dCgpKTsKKyAgICAKKyAgICBSYXdOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVs
OworICAgIFJhd05vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CiAKICAgICBub2Rl
LT5zZXRQcmV2KHByZXYpOwogICAgIG5vZGUtPnNldE5leHQobmV4dCk7CkBAIC05MiwxNyArMTM0
LDI1IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgdm9pZCBTZW4KICAgICBuZXh0
LT5zZXRQcmV2KG5vZGUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHZv
aWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUoTm9kZSogbm9kZSkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUgdm9pZCBTZW50aW5lbExpbmtl
ZExpc3Q8VCwgUmF3Tm9kZT46OnJlbW92ZShUKiBub2RlKQogewotICAgIE5vZGUqIHByZXYgPSBu
b2RlLT5wcmV2KCk7Ci0gICAgTm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKKyAgICBBU1NFUlQo
bm9kZSk7CisgICAgQVNTRVJUKCEhbm9kZS0+cHJldigpKTsKKyAgICBBU1NFUlQoISFub2RlLT5u
ZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7CisgICAgUmF3
Tm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKIAogICAgIHByZXYtPnNldE5leHQobmV4dCk7CiAg
ICAgbmV4dC0+c2V0UHJldihwcmV2KTsKKyAgICAKKyAgICBub2RlLT5zZXRQcmV2KDApOworICAg
IG5vZGUtPnNldE5leHQoMCk7CiB9CiAKIH0KIAordXNpbmcgV1RGOjpCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTsKIHVzaW5nIFdURjo6U2VudGluZWxMaW5rZWRMaXN0OwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106259</attachid>
            <date>2011-09-03 02:53:37 -0700</date>
            <delta_ts>2011-09-03 21:38:58 -0700</delta_ts>
            <desc>the patch - another attempt to fix windows</desc>
            <filename>dynopt_patch_8.diff</filename>
            <type>text/plain</type>
            <size>122273</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0ODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc5IEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
dGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAor
ICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0
b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2Rl
QmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNv
dW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3Vl
cyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bwor
ICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAg
ICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMs
IGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0
IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJz
dHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBz
dWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9y
bWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0
byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBz
dGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAg
Tm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlz
IGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFp
bGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYg
KHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNtZDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbjo6YnJhbmNoQWRkMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdEFnZ3Jl
Z2F0ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJFdmFsQ2Fj
aGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhpc3RpbmdFbnRyaWVzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9j
azo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVk
KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpH
bG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFt
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJv
ZmlsZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3Rp
Y3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0
ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZHluYW1pY2FsbHlQcmVkaWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlD
b21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0pTQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0ludDMyQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0RvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVl
T2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0pTQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjppc0RvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGxQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjppc051bWJlclByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25U
b1N0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFs
dWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzSW50MzJDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNEb3VibGVDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0
b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Om1lcmdl
UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlRm9yd2FyZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQmFja3dhcmQpOgorICAgICAg
ICAoSlNDOjpERkc6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAq
IGhlYXAvSGFuZGxlSGVhcC5oOgorICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpOb2Rl
KToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1p
emF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRUaW1lb3V0Q2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRf
b2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6
OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklU
KToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6dG9wVGllckpJVCk6CisgICAgICAgIChKU0M6OkpJ
VENvZGU6Om5leHRUaWVySklUKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAg
ICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJs
ZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0
aW1pemVkRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZU9wdGltaXplZEZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3IpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOgorICAgICAgICAqIHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6
QmFzaWNSYXdTZW50aW5lbE5vZGU6OkJhc2ljUmF3U2VudGluZWxOb2RlKToKKyAgICAgICAgKFdU
Rjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnNldFByZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jh
d1NlbnRpbmVsTm9kZTo6c2V0TmV4dCk6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxO
b2RlOjpwcmV2KToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6Om5leHQpOgor
ICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6aXNPbkxpc3QpOgorICAgICAgICAo
V1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6Ojo6U2VudGluZWxMaW5rZWRMaXN0KToKKyAg
ICAgICAgKFdURjo6OjpiZWdpbik6CisgICAgICAgIChXVEY6Ojo6ZW5kKToKKyAgICAgICAgKFdU
Rjo6OjpwdXNoKToKKwogMjAxMS0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIERGRyB2YXJpYWJsZSBwcmVkaWN0aW9ucyBvbmx5IHdvcmsgZm9yIGxvY2Fs
IHZhcmlhYmxlcywgbm90IHRlbXBvcmFyaWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAgU0VUKEphdmFTY3JpcHRD
b3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Fzc2Vt
YmxlciIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J5dGVjb2RlIgogICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vYnl0ZWNvbXBpbGVyIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
ZGZnIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaGVhcCIKICAgICAiJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2RlYnVnZ2VyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW50ZXJwcmV0
ZXIiCkBAIC01NCw3ICs1NSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGVi
dWdnZXIvRGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAog
ICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAotCisgICAgCiAgICAgaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmNwcAogICAgIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcAogICAgIGlu
dGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDgg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBbGlhc1RyYWNrZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZQUkluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
ZW5lcmF0aW9uSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8u
aCBcCkBAIC0xMTYsNiArMTE4LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdGlvbi5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk0
NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1NTAs
NiArMTU1MCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CisgICAgICAgICAg
ICAgICAgPEZpbHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iZGZnIgorICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxkZmdcREZHRHJp
dmVyLmgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICA8L0ZpbHRlcj4KIAkJPEZpbHRlcgog
CQkJTmFtZT0ieWFyciIKIAkJCT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9w
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlzaW9u
IDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzCSh3b3JraW5nIGNvcHkp
CkBAIC02LDcgKzYsNyBAQAogCT4KIAk8VG9vbAogCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgot
CQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcb2JqXEphdmFTY3JpcHRDb3JlXERlcml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87Li4v
Li4vQVBJLzsuLi8uLi9wYXJzZXIvOy4uLy4uL2J5dGVjb21waWxlci87Li4vLi4vaml0LzsuLi8u
Li9ydW50aW1lLzsuLi8uLi9ieXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0Zi87
Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4vaGVh
cC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJL
aXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
aW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNs
dWRlXHB0aHJlYWRzJnF1b3Q7IgorCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVv
dDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXEphdmFTY3JpcHRDb3JlXERlcml2ZWRTb3Vy
Y2VzXCZxdW90OzsuLi8uLi87Li4vLi4vQVBJLzsuLi8uLi9wYXJzZXIvOy4uLy4uL2J5dGVjb21w
aWxlci87Li4vLi4vZGZnLzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUvOy4uLy4uL2J5dGVjb2Rl
LzsuLi8uLi9pbnRlcnByZXRlci87Li4vLi4vd3RmLzsuLi8uLi9wcm9maWxlcjsuLi8uLi9hc3Nl
bWJsZXIvOy4uLy4uL2RlYnVnZ2VyLzsuLi8uLi9oZWFwLzsmcXVvdDskKFdlYktpdExpYnJhcmll
c0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxw
cml2YXRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7
OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1
b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7
JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVhZHMmcXVvdDsiCiAJCVBy
ZXByb2Nlc3NvckRlZmluaXRpb25zPSJfX1NURF9DIgogCQlGb3JjZWRJbmNsdWRlRmlsZXM9IklD
VVZlcnNpb24uaCIKIAkvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNtZAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3Jl
L2NvcHktZmlsZXMuY21kCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbWtkaXIgIiVQcml2YXRlSGVhZGVyc0RpcmVj
dG9yeSUiIDI+TlVMCiBmb3IgJSVkIGluICgKICAgICBhc3NlbWJsZXIKICAgICBieXRlY29kZQor
ICAgIGRmZwogICAgIGhlYXAKICAgICBkZWJ1Z2dlcgogICAgIGludGVycHJldGVyCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTAgQEAKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmll
clN1cHBvcnQuY3BwICovOyB9OwogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uY3BwICovOyB9OworCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFn
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmNwcCAqLzsgfTsKKwkJ
MEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCAqLzsgfTsKKwkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24uaCAqLzsgfTsK
KwkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNC
IC8qIERGR0RyaXZlci5oICovOyB9OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0
RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
clBvc2l4LmNwcCAqLzsgfTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFs
dWVXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87
IH07CkBAIC0zNzUsNyArMzc5LDcgQEAKIAkJOTY5QTA3MkEwRUQxQ0U2OTAwRjFGNjgxIC8qIExh
YmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlB
MDcyNzBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCAqLzsgfTsKIAkJOTY5QTA3MkIwRUQxQ0U2
OTAwRjFGNjgxIC8qIFJlZ2lzdGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk2OUEwNzI4MEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdpc3RlcklELmgg
Ki87IH07CiAJCTk2OUEwNzJDMEVEMUNFNjkwMEYxRjY4MSAvKiBTZWdtZW50ZWRWZWN0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzI5MEVE
MUNFNjkwMEYxRjY4MSAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLzsgfTsKLQkJOTY5QTA3OTYwRUQx
RDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5MDBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2Nr
LmNwcCAqLzsgfTsKKwkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5MDBF
RDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJf
RkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OwogCQk5NjlBMDc5NzBFRDFEM0FF
MDBGMUY2ODEgLyogQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJOTY5QTA3OTgwRUQxRDNBRTAw
RjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkyMEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hl
LmggKi87IH07CiAJCTk2OUEwNzk5MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTMwRUQx
RDNBRTAwRjFGNjgxIC8qIEluc3RydWN0aW9uLmggKi87IH07CkBAIC03NzksNiArNzgzLDEwIEBA
CiAJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZU
YWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZU
YWJsZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTQx
NDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdE
cml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyMjE0MTE1RDBF
MDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQzQzgyMzE0MTE1RDFBMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvcGFnYXRpb24uY3Bw
OyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0aW9uLmg7IHBhdGggPSBkZmcv
REZHUHJvcGFnYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYx
MkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNl
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTc5LDYgKzIxODcsMTAgQEAKIAkJ
ODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1By
b3BhZ2F0aW9uLmggKi8sCisJCQkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3Bh
Z2F0aW9uLmNwcCAqLywKKwkJCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggKi8sCisJCQkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8s
CiAJCQkJODZFQ0E0RjAxMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oICovLAog
CQkJCTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8s
CiAJCQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8s
CkBAIC0yNjE3LDYgKzI2MjksOCBAQAogCQkJCUMyMkM1MkZGMTNGQUY2RUYwMEI3REMwRCAvKiBm
aXhlZC1kdG9hLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQg
Lyogc3RydG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQg
LyogdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAv
KiBERkdQcm9wYWdhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVD
RDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIy
ODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBF
MTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
MzAzMyw2ICszMDQ3LDggQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTBGRDNDODI1MTQx
MTVENDAwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
aAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNiArMTAwMSwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25k
aXRpb24oY29uZCkpKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRp
dGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKKyAgICB7
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGRlc3QubV9wdHIp
LCBYODZSZWdpc3RlcnM6OnIxMSk7CisgICAgICAgIGFkZDMyKHNyYywgQWRkcmVzcyhYODZSZWdp
c3RlcnM6OnIxMSkpOworI2Vsc2UKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pbShzcmMubV92
YWx1ZSwgZGVzdC5tX3B0cik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoQWRk
MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICBhZGQzMihzcmMsIGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MDEsOSArMTQwMSwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQogI2Vu
ZGlmCiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1UYWIsIGJvb2wgaXNDb25zdHJ1Y3RvcikKK0NvZGVC
bG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5
cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJv
bFRhYmxlKiBzeW1UYWIsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+
IGFsdGVybmF0aXZlKQogICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFwKCZtX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApCisgICAgLCBtX2V4ZWN1dGVDb3VudGVyKC0x
MDAwKSAvLyB0cmlnZ2VyIG9wdGltaXphdGlvbiB3aGVuIHNpZ24gYml0IGNsZWFycwogICAgICwg
bV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKICAgICAsIG1fbnVtVmFycygwKQogICAgICwgbV9udW1Q
YXJhbWV0ZXJzKDApCkBAIC0xNDIyLDYgKzE0MjMsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAs
IG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFi
KQorICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3Vy
Y2UpOwogCkBAIC0xNDQxLDE1ICsxNDQzLDE4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIGFyZyA9ICV1OiAiLCBpICsgMSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBiYyA9ICVkOiAiLCBw
cm9maWxlLT5ieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAg
ICAgICAgICAgICJzYW1wbGVzID0gJXUsIGludDMyID0gJXUsIGRvdWJsZSA9ICV1LCBjZWxsID0g
JXUsIGFycmF5ID0gJXVcbiIsCi0gICAgICAgICAgICAgICAgcHJvZmlsZS0+bnVtYmVyT2ZTYW1w
bGVzKCksCi0gICAgICAgICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkludDMyKCksCi0g
ICAgICAgICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkRvdWJsZSgpLAotICAgICAgICAg
ICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZDZWxsKCksCi0gICAgICAgICAgICAgICAgcHJv
ZmlsZS0+cHJvYmFiaWxpdHlPZkFycmF5KCkpOworICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZGVy
cik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICB9CiAjZW5kaWYKKyAgICAK
KyAgICAvLyBXZSBzaG91bGQgbm90IGJlIGdhcmJhZ2UgY29sbGVjdGVkIGlmIHRoZXJlIGFyZSBp
bmNvbWluZyBjYWxscy4gQnV0CisgICAgLy8gaWYgdGhpcyBpcyBjYWxsZWQgZHVyaW5nIGhlYXAg
ZGVzdHJ1Y3Rpb24sIHRoZW4gdGhlcmUgbWF5IHN0aWxsIGJlCisgICAgLy8gaW5jb21pbmcgY2Fs
bHMsIHdoaWNoIGlzIGhhcm1sZXNzLgorICAgIAorICAgIC8vIE5vdGUgdGhhdCBvdXIgb3V0Z29p
bmcgY2FsbHMgd2lsbCBiZSByZW1vdmVkIGZyb20gb3RoZXIgQ29kZUJsb2NrcycKKyAgICAvLyBt
X2luY29taW5nQ2FsbHMgbGlua2VkIGxpc3RzIHRocm91Z2ggdGhlIGV4ZWN1dGlvbiBvZiB0aGUg
fkNhbGxMaW5rSW5mbworICAgIC8vIGRlc3RydWN0b3JzLgogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBmb3IgKHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpLCBpID0gMDsg
aSA8IHNpemU7ICsraSkKQEAgLTE1MTksNiArMTUyNCw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXQKIHsKICAgICBib29sIGhhbmRsZVdlYWtSZWZlcmVuY2VzID0g
ZmFsc2U7CiAgICAgCisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5h
dGl2ZS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xv
YmFsT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOwogICAg
IGlmIChtX3JhcmVEYXRhKSB7CkBAIC0xNzg5LDggKzE3OTYsMzAgQEAgdm9pZCBDb2RlQmxvY2s6
OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYQogfQogICAgIAogI2lmIEVOQUJMRShKSVQpCit2b2lk
IENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoaXNMaW5rZWQoKSk7CisgICAgCisg
ICAgaWYgKGlzREZHKSB7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwgaXNDYWxsID8g
b3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyNlbHNlCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxSZXR1cm5Mb2NhdGlv
biksIGlzQ2FsbD8gZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkgOiBn
bG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpKTsKKyAgICBoYXNT
ZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOworICAgIGNhbGxlZS5jbGVhcigpOworCisgICAgLy8g
SXQgd2lsbCBiZSBvbiBhIGxpc3QgaWYgdGhlIGNhbGxlZSBoYXMgYSBjb2RlIGJsb2NrLgorICAg
IGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6
OnVubGlua0NhbGxzKCkKIHsKKyAgICBpZiAoISFtX2FsdGVybmF0aXZlKQorICAgICAgICBtX2Fs
dGVybmF0aXZlLT51bmxpbmtDYWxscygpOwogICAgIGlmICghKG1fY2FsbExpbmtJbmZvcy5zaXpl
KCkgfHwgbV9tZXRob2RDYWxsTGlua0luZm9zLnNpemUoKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIW1fZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCkBAIC0xNzk5LDI0ICsxODI4LDEwMSBA
QCB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jYWxsTGlua0luZm9zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlu
a0luZm9zW2ldLmlzTGlua2VkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKSB7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25D
YWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5m
b3NbaV0uaXNDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0
KTsKLSNlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlv
bk5lYXJDYWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pLCBtX2NhbGxM
aW5rSW5mb3NbaV0uaXNDYWxsID8gbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENh
bGxMaW5rKCkgOiBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGlu
aygpKTsKLSAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVubGluaygpOworICAgICAgICBtX2Nh
bGxMaW5rSW5mb3NbaV0udW5saW5rKCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOwogICAg
IH0KIH0KKwordm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQoreworICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ0Nh
bGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5n
Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOworfQog
I2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpjbGVhckV2YWxDYWNoZSgpCiB7CisgICAgaWYgKCEh
bV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+Y2xlYXJFdmFsQ2FjaGUoKTsK
ICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVybjsKICAgICBtX3JhcmVEYXRhLT5t
X2V2YWxDb2RlQ2FjaGUuY2xlYXIoKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGlu
ZSB2b2lkIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMoVmVjdG9yPFQ+JiB0YXJnZXQsIFZlY3RvcjxU
PiYgc291cmNlKQoreworICAgIEFTU0VSVCh0YXJnZXQuc2l6ZSgpIDw9IHNvdXJjZS5zaXplKCkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0LnNpemUoKTsgKytpKQorICAgICAg
ICB0YXJnZXRbaV0gPSBzb3VyY2VbaV07Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpjb3B5RGF0YUZy
b21BbHRlcm5hdGl2ZSgpCit7CisgICAgaWYgKCFtX2FsdGVybmF0aXZlKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2NvbnN0YW50UmVnaXN0ZXJz
LCBtX2FsdGVybmF0aXZlLT5tX2NvbnN0YW50UmVnaXN0ZXJzKTsKKyAgICByZXBsYWNlRXhpc3Rp
bmdFbnRyaWVzKG1fZnVuY3Rpb25EZWNscywgbV9hbHRlcm5hdGl2ZS0+bV9mdW5jdGlvbkRlY2xz
KTsKKyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVuY3Rpb25FeHBycywgbV9hbHRlcm5h
dGl2ZS0+bV9mdW5jdGlvbkV4cHJzKTsKK30KKworLy8gRklYTUU6IEltcGxlbWVudCBPU1IuIElm
IGNvbXBpbGVPcHRpbWl6ZWQoKSBpcyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0
aGUKKy8vIGVwaWxvZ3VlLCBkbyBPU1IgZnJvbSB0aGUgb2xkIGNvZGUgYmxvY2sgdG8gdGhlIG5l
dyBvbmUuCisKKy8vIEZJWE1FOiBBZnRlciBkb2luZyBzdWNjZXNzZnVsIG9wdGltaXplZCBjb21w
aWxhdGlvbiwgcmVzZXQgdGhlIHByb2ZpbGluZyBjb3VudGVyIHRvIC0xLCBzbworLy8gdGhhdCB0
aGUgbmV4dCBleGVjdXRpb24gb2YgdGhlIG9sZCBjb2RlIGJsb2NrIHdpbGwganVtcCBzdHJhaWdo
dCBpbnRvIGNvbXBpbGVPcHRpbWl6ZWQoKQorLy8gYW5kIHBlcmZvcm0gT1NSLgorCisvLyBGSVhN
RTogRW5zdXJlIHRoYXQgYSBjYWxsIHRvIGNvbXBpbGVPcHRpbWl6ZWQoKSBqdXN0IGRvZXMgT1NS
IChhbmQgcmVzZXRzIHRoZSBjb3VudGVyIHRvIC0xKQorLy8gaWYgdGhlIGNvZGUgaGFkIGFscmVh
ZHkgYmVlbiBjb21waWxlZC4KKworQ29kZUJsb2NrKiBQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNl
bWVudCgpCit7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKK30KKworQ29kZUJsb2NrKiBF
dmFsQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxF
dmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsK
K30KKworQ29kZUJsb2NrKiBGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAg
IHJldHVybiAmc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3Ry
dWN0IDogQ29kZUZvckNhbGwpOworfQorCitKU09iamVjdCogUHJvZ3JhbUNvZGVCbG9jazo6Y29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSkKK3sKKyAgICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
Om5leHRUaWVySklUKGdldEpJVFR5cGUoKSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28g
bWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAg
ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAg
ICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQor
eworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRp
ZXJKSVQoZ2V0SklUVHlwZSgpKSkgeworICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1
cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgorICAgICAgICBkb250T3B0
aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNPYmpl
Y3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgIHJldHVybiBl
cnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQoreworICAg
IGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQo
Z2V0SklUVHlwZSgpKSkgeworICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgorICAgICAgICBkb250T3B0aW1pemVB
bnl0aW1lU29vbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNPYmplY3QqIGVy
cm9yID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5jb21waWxlT3B0aW1pemVkRm9yKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBtX2lzQ29uc3RydWN0
b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAgIHJldHVybiBlcnJvcjsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBA
QAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2VudGluZWxM
aW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKEpJVCkK
QEAgLTk4LDEyICs5OSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBzdHJ1Y3QgQ2FsbExpbmtJbmZvIHsKKyAgICBzdHJ1Y3QgQ2FsbExpbmtJbmZv
OiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIENh
bGxMaW5rSW5mbygpCiAgICAgICAgICAgICA6IGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQog
ICAgICAgICAgICAgLCBpc0NhbGwoZmFsc2UpCisgICAgICAgICAgICAsIGlzREZHKGZhbHNlKQog
ICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5DYWxsTGlua0luZm8oKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgICAgICAgICBy
ZW1vdmUoKTsKKyAgICAgICAgfQogCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1
cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwgb3IgYSBub3Jt
YWwgY2FsbCBpbiBERkcKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGhvdFBhdGhC
ZWdpbjsKQEAgLTExMSwxMyArMTE5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKSVRX
cml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwogICAgICAgICBib29sIGhhc1NlZW5TaG91
bGRSZXBhdGNoIDogMTsKICAgICAgICAgYm9vbCBpc0NhbGwgOiAxOworICAgICAgICBib29sIGlz
REZHIDogMTsKIAogICAgICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gY2FsbGVlOyB9Ci0g
ICAgICAgIHZvaWQgdW5saW5rKCkKLSAgICAgICAgewotICAgICAgICAgICAgaGFzU2VlblNob3Vs
ZFJlcGF0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgIGNhbGxlZS5jbGVhcigpOwotICAgICAgICB9
CisgICAgICAgIHZvaWQgdW5saW5rKEpTR2xvYmFsRGF0YSYsIFJlcGF0Y2hCdWZmZXImKTsKIAog
ICAgICAgICBib29sIHNlZW5PbmNlKCkKICAgICAgICAgewpAQCAtMjEwLDEzICsyMTUsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUOwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0
KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlLCBib29sIGlzQ29uc3RydWN0b3IpOworICAgICAgICBDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwgSlNHbG9i
YWxPYmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zm
c2V0LCBTeW1ib2xUYWJsZSosIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+
IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBIZWFwKiBtX2hlYXA7CiAKICAgICBwdWJsaWM6CiAg
ICAgICAgIHZpcnR1YWwgfkNvZGVCbG9jaygpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUuZ2V0KCk7IH0KKyAgICAgICAg
UGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0
ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwogICAgICAgICB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3Im
KTsKQEAgLTI3OSw2ICsyODcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAg
ICAgICB2b2lkIHVubGlua0NhbGxzKCk7CisgICAgICAgIAorICAgICAgICBib29sIGhhc0luY29t
aW5nQ2FsbHMoKSB7IHJldHVybiBtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5n
Q2FsbHMuZW5kKCk7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChD
YWxsTGlua0luZm8qIGluY29taW5nKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luY29taW5n
Q2FsbHMucHVzaChpbmNvbWluZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
dW5saW5rSW5jb21pbmdDYWxscygpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5URVJQUkVURVIp
CkBAIC0zMDAsOCArMzE3LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBFTkFC
TEUoSklUKQotICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0
cnVjdG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KSA6IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9CisgICAg
ICAgIHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ppdENv
ZGUgPSBjb2RlOworICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0
aEFyaXR5Q2hlY2s7CisgICAgICAgIH0KKyAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsg
cmV0dXJuIG1faml0Q29kZTsgfQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUo
KSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgpOyB9CiAgICAgICAgIEV4ZWN1dGFibGVQb29s
KiBleGVjdXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlUG9v
bCgpOyB9CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiBy
ZXBsYWNlbWVudCgpID0gMDsKKyNlbHNlCisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklU
VHlwZSgpIHsgcmV0dXJuIEpJVENvZGU6OkJhc2VsaW5lSklUOyB9CiAjZW5kaWYKIAogICAgICAg
ICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293
bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQpAQCAtMzk4LDYgKzQyNSwxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJj
aDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fdmFs
dWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOwogICAg
ICAgICB9CisgICAgICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaW50
IGFyZ3VtZW50SW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGFyZ3Vt
ZW50SW5kZXggLSAxOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRl
eCkgPj0gbV92YWx1ZVByb2ZpbGVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gdmFsdWVQcm9maWxlKGFyZ3VtZW50
SW5kZXggLSAxKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQtPmJ5dGVjb2RlT2Zmc2V0ICE9IC0x
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQogI2VuZGlmCiAKICAgICAgICAgdW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluZm9D
b3VudCgpIGNvbnN0CkBAIC01MzUsNiArNTcyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGU7IH0KIAogICAgICAgICB2
b2lkIHNocmlua1RvRml0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFs
dGVybmF0aXZlKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRp
b24oKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50MzJf
dCBtX2V4ZWN1dGVDb3VudGVyOwogCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFp
bmluZyBtZW1iZXJzIHByaXZhdGUuCiAKQEAgLTU5NCw2ICs2NDUsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgVmVjdG9yPEdsb2JhbFJlc29sdmVJbmZvPiBtX2dsb2JhbFJlc29sdmVJbmZv
czsKICAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAg
ICBWZWN0b3I8TWV0aG9kQ2FsbExpbmtJbmZvPiBtX21ldGhvZENhbGxMaW5rSW5mb3M7CisgICAg
ICAgIEpJVENvZGUgbV9qaXRDb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9q
aXRDb2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlu
a0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gPiBtX2luY29taW5nQ2Fs
bHM7CiAjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTYxMCw2ICs2NjQs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJs
ZTsKIAorICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOyAvLyBGSVhNRSBt
YWtlIHRoaXMgZG8gc29tZXRoaW5nCisKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIHB1YmxpYzoKQEAgLTY0Niw5
ICs3MDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyByZXNwb25zaWJsZSBmb3IgbWFya2lu
ZyBpdC4KIAogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25l
ZCBzb3VyY2VPZmZzZXQpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUs
IGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZt
X3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgR2xv
YmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUg
Y29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25Q
dHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVy
RXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJj
ZU9mZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFsc2UsIGFsdGVybmF0aXZlKQogICAg
ICAgICB7CiAgICAgICAgIH0KIApAQCAtNjU4LDE2ICs3MTQsMjIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7
CiAgICAgcHVibGljOgotICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKLSAg
ICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGds
b2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAgICAgIFByb2dyYW1Db2RlQmxvY2so
UHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAg
ICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxP
YmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAg
ICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlm
CiAgICAgfTsKIAogICAgIGNsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJs
b2NrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCkKLSAg
ICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGds
b2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAgICAgIEV2YWxDb2RlQmxvY2soRXZh
bEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2Nv
cGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICAsIG1fYmFzZVNj
b3BlRGVwdGgoYmFzZVNjb3BlRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNjgxLDYg
Kzc0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxl
cy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMpOwog
ICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwor
I2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgbV9iYXNlU2NvcGVEZXB0aDsKQEAg
LTY5MywxNCArNzYxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBhcyB3ZSBuZWVk
IHRvIGluaXRpYWxpc2UgdGhlIENvZGVCbG9jayBiZWZvcmUgd2UgY291bGQgaW5pdGlhbGlzZSBh
bnkgUmVmUHRyIHRvIGhvbGQgdGhlIHNoYXJlZAogICAgICAgICAvLyBzeW1ib2wgdGFibGUsIHNv
IHdlIGp1c3QgcGFzcyBhcyBhIHJhdyBwb2ludGVyIHdpdGggYSByZWYgY291bnQgb2YgMS4gIFdl
IHRoZW4gbWFudWFsbHkgZGVyZWYKICAgICAgICAgLy8gaW4gdGhlIGRlc3RydWN0b3IuCi0gICAg
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgYm9vbCBpc0NvbnN0cnVjdG9yKQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVj
dXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zm
c2V0LCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCkubGVha1JlZigpLCBpc0NvbnN0cnVjdG9y
KQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVy
bmF0aXZlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlw
ZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBTaGFyZWRTeW1i
b2xUYWJsZTo6Y3JlYXRlKCkubGVha1JlZigpLCBpc0NvbnN0cnVjdG9yLCBhbHRlcm5hdGl2ZSkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIH5GdW5jdGlvbkNvZGVCbG9jaygpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxlKCktPmRlcmVmKCk7CiAgICAgICAg
IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisjZW5kaWYK
ICAgICB9OwogCiAgICAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAko
cmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFZhbHVlUHJv
ZmlsZSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGNvdW50cyAqIGNl
cnRhaW50eSAvIG51bWJlck9mU2FtcGxlczsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHVu
c2lnbmVkIG51bWJlck9mSW50MzJzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IDA7CkBAIC0xNDIsNiArMTQyLDg2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAg
IHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZkFycmF5cygpLCBu
dW1iZXJPZlNhbXBsZXMoKSk7CiAgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVt
cChGSUxFKiBvdXQpCisgICAgeworICAgICAgICBmcHJpbnRmKG91dCwKKyAgICAgICAgICAgICAg
ICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJh
eSA9ICV1IiwKKyAgICAgICAgICAgICAgICBudW1iZXJPZlNhbXBsZXMoKSwKKyAgICAgICAgICAg
ICAgICBudW1iZXJPZkludDMycygpLAorICAgICAgICAgICAgICAgIG51bWJlck9mRG91Ymxlcygp
LAorICAgICAgICAgICAgICAgIG51bWJlck9mQ2VsbHMoKSwKKyAgICAgICAgICAgICAgICBudW1i
ZXJPZkFycmF5cygpKTsKKyAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAgICAg
aWYgKCEhYnVja2V0c1tpXSB8fCAhIXdlYWtCdWNrZXRzW2ldKSB7CisgICAgICAgICAgICAgICAg
aWYgKGZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiOiAiKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIsICIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldKQorICAgICAgICAgICAg
ICAgIGZwcmludGYob3V0LCAiJXMiLCBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuZGVzY3Jp
cHRpb24oKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXRzW2ld
KQorICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiRGVhZENlbGwiKTsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorICAgIAorICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKKyAgICAgICAgdW5z
aWduZWQgc2FtcGxlczsKKyAgICAgICAgdW5zaWduZWQgaW50MzJzOworICAgICAgICB1bnNpZ25l
ZCBkb3VibGVzOworICAgICAgICB1bnNpZ25lZCBjZWxsczsKKyAgICAgICAgdW5zaWduZWQgYXJy
YXlzOworICAgIH07CisKKyAgICAvLyBPcHRpbWl6ZWQgbWV0aG9kIGZvciBnZXR0aW5nIGFsbCBj
b3VudHMgYXQgb25jZS4KKyAgICB2b2lkIGNvbXB1dGVTdGF0aXN0aWNzKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29uc3QKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIHNhbXBsZXMgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQzMnMgID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgZG91YmxlcyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNlbGxzICAgPSAw
OworICAgICAgICB1bnNpZ25lZCBhcnJheXMgID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAgICAg
aWYgKCFidWNrZXRzW2ldKSB7CisgICAgICAgICAgICAgICAgV2Vha0J1Y2tldCB3ZWFrQnVja2V0
ID0gd2Vha0J1Y2tldHNbaV07CisgICAgICAgICAgICAgICAgaWYgKCEhd2Vha0J1Y2tldCkgewor
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVzKys7CisgICAgICAgICAgICAgICAgICAgIGNlbGxz
Kys7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ZWFrQnVja2V0LmdldENsYXNzSW5mbygpID09
ICZKU0FycmF5OjpzX2luZm8pCisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheXMrKzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNhbXBsZXMrKzsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShidWNrZXRzW2ldKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAg
ICAgICAgICAgaW50MzJzKys7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgp
KQorICAgICAgICAgICAgICAgIGRvdWJsZXMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVl
LmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgY2VsbHMrKzsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNKU0FycmF5KCZnbG9iYWxEYXRhLCB2YWx1ZS5hc0NlbGwoKSkpCisgICAgICAgICAgICAg
ICAgICAgIGFycmF5cysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzdGF0aXN0aWNzLnNhbXBsZXMgPSBzYW1wbGVzOworICAgICAgICBzdGF0aXN0aWNzLmlu
dDMycyAgPSBpbnQzMnM7CisgICAgICAgIHN0YXRpc3RpY3MuZG91YmxlcyA9IGRvdWJsZXM7Cisg
ICAgICAgIHN0YXRpc3RpY3MuY2VsbHMgICA9IGNlbGxzOworICAgICAgICBzdGF0aXN0aWNzLmFy
cmF5cyAgPSBhcnJheXM7CisgICAgfQogICAgIAogICAgIGludCBieXRlY29kZU9mZnNldDsgLy8g
LTEgZm9yIHByb2xvZ3VlCiAgICAgRW5jb2RlZEpTVmFsdWUgYnVja2V0c1tudW1iZXJPZkJ1Y2tl
dHNdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwcmVzZXJ2
ZUxhc3RWYXIoCiAgICAgICAgIG1fbGFzdFZhciA9ICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7
CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSog
cHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUsIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaykKK0J5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCkKICAgICA6IG1f
c2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigp
KQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVj
dC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZv
KHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNSaWNoU291cmNlSW5mbygpKQpAQCAt
MjI4LDYgKzIyOCw5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8K
ICAgICAKICAgICBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID0gMTsgLy8gQWxsb2NhdGUg
c3BhY2UgZm9yICJ0aGlzIgogICAgIGNvZGVCbG9jay0+bV9udW1DYXB0dXJlZFZhcnMgPSBjb2Rl
QmxvY2stPm1fbnVtVmFyczsKKyAgICAKKyAgICBpZiAoY29tcGlsYXRpb25LaW5kID09IE9wdGlt
aXppbmdDb21waWxhdGlvbikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTI1OCw3ICsyNjEs
NyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgfQogfQog
Ci1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSog
ZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNj
b3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkp
CiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmpl
Y3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKQEAgLTQxOSw3ICs0MjIsNyBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAgICAgfQogfQogCi1CeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5v
ZGUqIGV2YWxOb2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKICAg
ICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5kZWJ1
Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3Vy
Y2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNSaWNoU291cmNlSW5mbygp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDkgKzkyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRlZENv
ZGUpOwogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUoKTsKIAotICAgICAg
ICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9s
VGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEZ1
bmN0aW9uQm9keU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgQ29kZUJsb2Nr
Kik7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgU2NvcGVDaGFpbk5vZGUq
LCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqKTsKKyAgICAgICAgZW51bSBDb21waWxhdGlv
bktpbmQgeyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKKyAgICAg
ICAgCisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgU2NvcGVDaGFpbk5v
ZGUqLCBTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwor
ICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5v
ZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAg
IEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJs
ZSosIEV2YWxDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwogCiAgICAgICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQogICAgICAg
ICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICptX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXM7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY29tcGlsZSB0aGUgZGF0YWZsb3cgZ3JhcGggZnJv
bSBhIENvZGVCbG9jay4KIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKIHB1YmxpYzoKLSAgICBCeXRl
Q29kZVBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBHcmFwaCYgZ3JhcGgpCisgICAgQnl0ZUNvZGVQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBHcmFw
aCYgZ3JhcGgpCiAgICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxl
ZEJsb2NrKQogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCiAgICAgICAgICwgbV9jdXJyZW50SW5k
ZXgoMCkKICAgICAgICAgLCBtX3BhcnNlRmFpbGVkKGZhbHNlKQpAQCAtNjUsNiArNjYsOSBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFz
c2VkVmFyQXJncygwKQogICAgIHsKKyNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisg
ICAgICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8g
UGFyc2UgYSBmdWxsIENvZGVCbG9jayBvZiBieXRlY29kZS4KQEAgLTQyMSw4ICs0MjUsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChhcmdJZHgpKTsKICAgICAg
ICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygw
KSwgT3BJbmZvKFByZWRpY3ROb25lKSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVj
dGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAg
ICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2Rl
KSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpCisgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsK
ICAgICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAg
ICAgICAgICAgZHluYW1pY2FsbHlQcmVkaWN0KGNhbGwsIG1fY3VycmVudEluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9jYWxsKSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xv
dHMpCiAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3RzID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplICsgYXJnQ291bnQ7CiAgICAgICAgIHJldHVybiBjYWxsOwpAQCAtNDYyLDkg
KzQ2OCwzMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxlICghbV9y
ZXVzYWJsZU5vZGVTdGFjay5pc0VtcHR5KCkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGR5bmFt
aWNhbGx5UHJlZGljdChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KQorICAgIHsKKyNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisgICAgICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9IG1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChwcm9maWxlKTsKKyNpZiBE
RkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIkR5bmFtaWMgcHJlZGljdGlvbiBbJXUs
ICV1XTogIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgcHJvZmlsZS0+ZHVt
cChzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgbV9ncmFw
aFtub2RlSW5kZXhdLnByZWRpY3QobWFrZVByZWRpY3Rpb24oKm1fZ2xvYmFsRGF0YSwgKnByb2Zp
bGUpLCBEeW5hbWljUHJlZGljdGlvbik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obm9k
ZUluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworI2VuZGlmCisg
ICAgfQorICAgIAorICAgIHZvaWQgZHluYW1pY2FsbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgeworICAgICAgICBkeW5hbWljYWxseVByZWRpY3Qobm9kZUluZGV4LCBtX2N1cnJl
bnRJbmRleCk7CisgICAgfQogCiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsK
ICAgICBHcmFwaCYgbV9ncmFwaDsKIAogICAgIC8vIFRoZSBjdXJyZW50IGJsb2NrIGJlaW5nIGdl
bmVyYXRlZC4KQEAgLTU2Myw3ICs1OTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJl
bnRJbmRleCkpOwogICAgICAgICAgICAgcmV0dXJuICFtX3BhcnNlRmFpbGVkOwogICAgICAgICB9
Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFN3aXRjaCBvbiB0aGUgY3VycmVudCBieXRlY29kZSBv
cGNvZGUuCiAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVj
dGlvbnNCZWdpbiArIG1fY3VycmVudEluZGV4OwogICAgICAgICBzd2l0Y2ggKGludGVycHJldGVy
LT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSkgewpAQCAtODgzLDYg
KzkxMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAg
ICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZv
KDApLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlLCBwcm9wZXJ0eSwgYWxpYXNlcy5sb29rdXBH
ZXRCeVZhbChiYXNlLCBwcm9wZXJ0eSkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5VmFsKTsKKyAgICAgICAgICAgIGR5bmFtaWNhbGx5UHJl
ZGljdChnZXRCeVZhbCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5
VmFsKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC05MTIs
NiArOTQyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0TWV0aG9kID0gYWRkVG9HcmFwaChH
ZXRNZXRob2QsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7
CiAgICAgICAgICAgICBzZXQoZ2V0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRNZXRob2Qp
OworICAgICAgICAgICAgZHluYW1pY2FsbHlQcmVkaWN0KGdldE1ldGhvZCk7CiAgICAgICAgICAg
ICBhbGlhc2VzLnJlY29yZEdldE1ldGhvZChnZXRNZXRob2QpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2N1cnJlbnRJbmRleCArPSBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjaykg
KyBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CkBAIC05MjUsNiArOTU2LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBOb2RlSW5kZXggZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50
aWZpZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeUlkKTsKKyAgICAgICAgICAgIGR5bmFt
aWNhbGx5UHJlZGljdChnZXRCeUlkKTsKICAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0QnlJ
ZChnZXRCeUlkKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X2lkKTsKQEAg
LTEzNTAsNyArMTM4Miw3IEBAIGJvb2wgcGFyc2UoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEq
IGcKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKICAgICByZXR1cm4gZmFsc2U7CiAjZWxz
ZQotICAgIHJldHVybiBCeXRlQ29kZVBhcnNlcihnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIGdyYXBo
KS5wYXJzZSgpOworICAgIHJldHVybiBCeXRlQ29kZVBhcnNlcihnbG9iYWxEYXRhLCBjb2RlQmxv
Y2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgZ3JhcGgpLnBhcnNlKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0J5dGVDb2RlUGFyc2VyLmgiCisj
aW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkdQcm9wYWdhdGlvbi5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gQ29tcGlsZU1vZGUgeyBD
b21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OworaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFy
Z3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCit7CisgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBHcmFwaCBkZmcoY29kZUJs
b2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICBpZiAoIXBh
cnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCisgICAgICAgIGRm
Zy5wcmVkaWN0QXJndW1lbnRUeXBlcyhjYWxsZWVBcmdzRXhlYywgY29kZUJsb2NrKTsKKyAgICAK
KyAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgIAorICAgIEpJ
VENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKKyAgICBp
ZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CisgICAgICAgIEFTU0VSVChqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0YUZsb3dKSVQuY29tcGls
ZUZ1bmN0aW9uKGppdENvZGUsICpqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChjb21waWxlTW9kZSA9PSBDb21waWxlT3RoZXIpOworICAgICAgICBB
U1NFUlQoIWppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIAorICAgICAgICBkYXRhRmxv
d0pJVC5jb21waWxlKGppdENvZGUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENv
ZGUmIGppdENvZGUpCit7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZU90aGVyLCBleGVjLCAw
LCBjb2RlQmxvY2ssIGppdENvZGUsIDApOworfQorCitib29sIHRyeUNvbXBpbGVGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVX
aXRoQXJpdHlDaGVjaykKK3sKKyAgICByZXR1cm4gY29tcGlsZShDb21waWxlRnVuY3Rpb24sIGV4
ZWMsIGNhbGxlZUFyZ3NFeGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5
Q2hlY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0RyaXZlcl9oCisjZGVmaW5lIERGR0RyaXZlcl9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEV4ZWNTdGF0ZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI7CisKK25hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxFKERGR19K
SVQpCitib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYpOwor
Ym9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdz
RXhlYywgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKTsKKyNlbHNlCitpbmxpbmUgYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0
ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wg
dHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJ
VENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlm
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiAr
MTIxLDEwIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICB9
CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKICAgICAgICAgcHJpbnRmKCIlcyQldSIsIGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgICAgIGlm
IChjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBub2RlLnZhbHVlT2ZK
U0NvbnN0YW50KGNvZGVCbG9jayk7CisgICAgICAgICAgICBwcmludGYoIiA9ICVzIiwgdmFsdWUu
ZGVzY3JpcHRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAg
ICAgfQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNKdW1wKCkpIHsKQEAgLTE4
NiwxNyArMTkwLDQ3IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGVJbmRleCBvcCkKICAg
ICB9CiB9CiAKLXZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhl
YykKK3ZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSogZXhlYywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzID0gc3Rk
OjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1bWVudFByZWRp
Y3Rpb25zLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBudW1iZXJP
ZkFyZ3VtZW50czsgKythcmcpIHsKLSAgICAgICAgSlNWYWx1ZSBhcmd1bWVudFZhbHVlID0gZXhl
Yy0+YXJndW1lbnQoYXJnIC0gMSk7Ci0gICAgICAgIGlmIChhcmd1bWVudFZhbHVlLmlzSW50MzIo
KSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJl
ZGljdEludDMyOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVudFZhbHVlLmlzRG91YmxlKCkpCi0g
ICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RE
b3VibGU7CisgICAgaWYgKGV4ZWMpIHsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRz
ID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgbV9hcmd1bWVu
dFByZWRpY3Rpb25zLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBhcmcg
PSAxOyBhcmcgPCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUgYXJndW1lbnRWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZyAtIDEpOworICAgICAgICAgICAg
aWYgKGFyZ3VtZW50VmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgICAgIG1fYXJndW1lbnRQ
cmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJlZGljdEludDMyOworICAgICAgICAgICAgZWxz
ZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJlZGljdERvdWJsZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisgICAgQVNTRVJU
KGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUpOworCisgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIENvZGVC
bG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAg
QVNTRVJUKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID49IDEpOworICAgIGZvciAoc2l6ZV90
IGFyZyA9IDE7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnMpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBwcm9maWxl
ZENvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgaWYgKCFw
cm9maWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorI2lmIERGR19ERUJVR19W
RVJCT1NFCisgICAgICAgIHByaW50ZigiQXJndW1lbnQgcHJvZmlsZSBbJWx1XTogIiwgYXJnKTsK
KyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7Cisj
ZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGlj
dGlvbnNbYXJnXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihnbG9iYWxEYXRhLCAqcHJvZmlsZSkp
OworICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIiAgICBQ
cmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fYXJndW1lbnRQcmVkaWN0aW9u
c1thcmddLm1fdmFsdWUpKTsKKyNlbmRpZgogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGNvZGVCbG9jayk7CisjZW5kaWYKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTQ0ODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSA8UmVnaXN0ZXJG
aWxlLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR05vZGUuaD4KKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgpAQCAtMTM1LDEyICsxMzYsMTEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gKm1fYmxvY2tzW2Jsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUJlZ2lu
KV07CiAgICAgfQogCi0gICAgdm9pZCBwcmVkaWN0KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChp
bnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNv
dXJjZSkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudFByZWRp
Y3Rpb25zLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAg
ICAgICAgIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1f
dmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJl
ZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNv
dXJjZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJh
bmQgPj0gbV92YXJpYWJsZVByZWRpY3Rpb25zLnNpemUoKSkgewpAQCAtMTQ4LDM3ICsxNDgsMzcg
QEAgcHVibGljOgogICAgICAgICAgICAgbV92YXJpYWJsZVByZWRpY3Rpb25zLnJlc2l6ZShvcGVy
YW5kICsgMSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1lcmdlUHJlZGljdGlvbiht
X3ZhcmlhYmxlUHJlZGljdGlvbnNbb3BlcmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJl
ZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJp
YWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rp
b24sIHNvdXJjZSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRpY3RHbG9iYWxWYXIodW5z
aWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3Vy
Y2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIs
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAg
ewogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmZpbmQodmFyTnVtYmVyICsgMSk7CiAgICAgICAg
IGlmIChpdGVyID09IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZW5kKCkpIHsKICAgICAgICAgICAg
IFByZWRpY3Rpb25TbG90IHByZWRpY3Rpb25TbG90OwotICAgICAgICAgICAgbWVyZ2VQcmVkaWN0
aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNv
dXJjZSkpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVByZWRpY3Rpb24ocHJlZGlj
dGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAg
ICAgICAgICAgICBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVk
aWN0aW9uU2xvdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVBy
ZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgICAgICByZXR1cm4gbWVyZ2VQ
cmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9u
LCBzb3VyY2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0KE5vZGUmIG5vZGUsIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisgICAgYm9v
bCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlv
blNvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVk
aWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgp
LCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
R2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJl
cigpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigpLCBwcmVkaWN0aW9uLCBz
b3VyY2UpOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0TWV0aG9kOgog
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2Ug
Q29uc3RydWN0OgotICAgICAgICAgICAgbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7
CisgICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI2LDEyICsyMjYsNDMgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwogICAgICAgICB9CiAgICAgfQorICAgIAor
ICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCisgICAg
Ym9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1
cm4gYXQobm9kZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgfQorICAgIGJvb2wgaXNKU0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUlu
ZGV4KS5pc0NvbnN0YW50KCk7CisgICAgfQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KENvZGVC
bG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGF0KG5vZGVJbmRleCkuaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAg
IGJvb2wgaXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzRG91YmxlQ29u
c3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0
YW50IHZhbHVlcyBmcm9tIG5vZGVzLgorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spOworICAgIH0K
KyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCku
dmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgZG91YmxlIHZhbHVl
T2ZEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZEb3VibGVDb25z
dGFudChjb2RlQmxvY2spOworICAgIH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgY29u
c3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICNlbmRpZgogCi0gICAgdm9pZCBwcmVkaWN0QXJn
dW1lbnRUeXBlcyhFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHByZWRpY3RBcmd1bWVudFR5cGVzKEV4
ZWNTdGF0ZSosIENvZGVCbG9jayopOwogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4g
LCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJl
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTMsNiArOTEzLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0g
bV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5pc0NhbGwgPSBtX2pz
Q2FsbHNbaV0ubV9pc0NhbGw7CisgICAgICAgIGluZm8uaXNERkcgPSB0cnVlOwogICAgICAgICBp
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCkpOwogICAgICAgICBpbmZvLmhvdFBhdGhC
ZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNr
KTsKICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDM5
ICsyMDcsMTQgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNo
ZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29u
c3RhbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBncmFwaCgpW25vZGVJbmRleF0uaXNDb25zdGFudCgp
OwotICAgIH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5kZXgpICYmIHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpOwotICAgIH0KLSAgICBib29sIGlzRG91Ymxl
Q29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0pT
Q29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzTnVt
YmVyKCk7Ci0gICAgfQorICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNKU0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNKU0NvbnN0YW50
KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUlu
ZGV4KTsgfQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7
IH0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMu
Ci0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgdW5z
aWduZWQgY29uc3RhbnRJbmRleCA9IGdyYXBoKClbbm9kZUluZGV4XS5jb25zdGFudE51bWJlcigp
OwotICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4KS5nZXQoKTsKLSAgICB9Ci0gICAgaW50
MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOwotICAgIH0KLSAgICBkb3Vi
bGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAg
ICAgICBBU1NFUlQoaXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkudW5jaGVja2VkR2V0TnVtYmVyKCk7Ci0gICAg
fQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyBy
ZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUluZGV4KTsg
fQorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChjb2RlQmxvY2soKSwgbm9kZUlu
ZGV4KTsgfQorICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKCks
IG5vZGVJbmRleCk7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgSklUIGdlbmVyYXRlIGR5bmFt
aWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgogI2lmIERGR19KSVRfQVNT
RVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ0ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNiArNTQsOSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC0xOTUsNiArMTk4LDcgQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGlj
dEFycmF5IAogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICA9IDB4MDQ7
CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RG91YmxlID0gMHgwODsKIHN0YXRp
YyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIgPSAweDBjOworc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdFRvcCAgICA9IDB4MGY7CiBzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBEeW5hbWljUHJlZGljdGlvblRhZyA9IDB4ODA7CiBzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFzayAgICA9IDB4ODA7CiAKQEAgLTIwMiw3ICsyMDYsNyBA
QCBlbnVtIFByZWRpY3Rpb25Tb3VyY2UgeyBTdGF0aWNQcmVkaWN0aW9uCiAKIGlubGluZSBib29s
IGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKHZh
bHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYmICEodmFsdWUgJiB+UHJlZGljdEFy
cmF5KTsKKyAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYm
ICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7CiB9CiAKIGlu
bGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCkBAIC0yMjIs
NyArMjI2LDcgQEAgaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3RlZAogCiBp
bmxpbmUgYm9vbCBpc051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZhbHVlICYgflByZWRpY3RO
dW1iZXIpOworICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1iZXIpICYmICEodmFsdWUg
JiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwogfQogCiBpbmxpbmUgYm9v
bCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCkBAIC0yMzEsNiArMjM1
LDQyIEBAIGlubGluZSBib29sIGlzRHluYW1pY1ByZWRpY3Rpb24oUHJlZGljdGUKICAgICByZXR1
cm4gISEodmFsdWUgJiBEeW5hbWljUHJlZGljdGlvblRhZyk7CiB9CiAKKyNpZm5kZWYgTkRFQlVH
CitpbmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFs
dWUpCit7CisgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24odmFsdWUpKSB7CisgICAgICAgIHN3
aXRjaCAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spIHsKKyAgICAgICAgY2FzZSBQcmVkaWN0
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tYm90dG9tIjsKKyAgICAgICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tY2VsbCI7CisgICAgICAgIGNh
c2UgUHJlZGljdEFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJwLWR5bi1hcnJheSI7CisgICAg
ICAgIGNhc2UgUHJlZGljdEludDMyOgorICAgICAgICAgICAgcmV0dXJuICJwLWR5bi1pbnQzMiI7
CisgICAgICAgIGNhc2UgUHJlZGljdE51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4t
bnVtYmVyIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tdG9w
IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSBQcmVk
aWN0Tm9uZToKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtYm90dG9tIjsKKyAgICBjYXNlIFByZWRp
Y3RDZWxsOgorICAgICAgICByZXR1cm4gInAtc3RhdC1jZWxsIjsKKyAgICBjYXNlIFByZWRpY3RB
cnJheToKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtYXJyYXkiOworICAgIGNhc2UgUHJlZGljdElu
dDMyOgorICAgICAgICByZXR1cm4gInAtc3RhdC1pbnQzMiI7CisgICAgY2FzZSBQcmVkaWN0TnVt
YmVyOgorICAgICAgICByZXR1cm4gInAtc3RhdC1udW1iZXIiOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAicC1zdGF0LXRvcCI7CisgICAgfQorfQorI2VuZGlmCisKIGlubGluZSBQcmVk
aWN0ZWRUeXBlIG1lcmdlUHJlZGljdGlvbnMoUHJlZGljdGVkVHlwZSBsZWZ0LCBQcmVkaWN0ZWRU
eXBlIHJpZ2h0KQogewogICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKGxlZnQpID09IGlzRHlu
YW1pY1ByZWRpY3Rpb24ocmlnaHQpKQpAQCAtMjQ1LDkgKzI4NSwxMiBAQCBpbmxpbmUgUHJlZGlj
dGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1p
bmxpbmUgdm9pZCBtZXJnZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkK
K2lubGluZSBib29sIG1lcmdlUHJlZGljdGlvbihUJiBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0
KQogewotICAgIGxlZnQgPSBzdGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19j
YXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpLCByaWdodCkpOworICAgIFByZWRpY3RlZFR5cGUgbmV3
UHJlZGljdGlvbiA9IHN0YXRpY19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMoc3RhdGljX2Nhc3Q8
UHJlZGljdGVkVHlwZT4obGVmdCksIHJpZ2h0KSk7CisgICAgYm9vbCByZXN1bHQgPSBuZXdQcmVk
aWN0aW9uICE9IHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpOworICAgIGxlZnQgPSBu
ZXdQcmVkaWN0aW9uOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGlubGluZSBQcmVkaWN0ZWRU
eXBlIG1ha2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlvblNvdXJjZSBz
b3VyY2UpCkBAIC0yNTksMjMgKzMwMiwzMSBAQCBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJl
ZGljdGlvbihQcmVkCiAgICAgcmV0dXJuIHR5cGUgfCAoc291cmNlID09IER5bmFtaWNQcmVkaWN0
aW9uID8gRHluYW1pY1ByZWRpY3Rpb25UYWcgOiAwKTsKIH0KIAotI2lmbmRlZiBOREVCVUcKLWlu
bGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkK
KyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCitpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJl
ZGljdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZhbHVlUHJvZmlsZSYgcHJv
ZmlsZSkKIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSBQcmVkaWN0Tm9uZToKLSAg
ICAgICAgcmV0dXJuICJwLWJvdHRvbSI7Ci0gICAgY2FzZSBQcmVkaWN0Q2VsbDoKLSAgICAgICAg
cmV0dXJuICJwLWNlbGwiOwotICAgIGNhc2UgUHJlZGljdEFycmF5OgotICAgICAgICByZXR1cm4g
InAtYXJyYXkiOwotICAgIGNhc2UgUHJlZGljdEludDMyOgotICAgICAgICByZXR1cm4gInAtaW50
MzIiOwotICAgIGNhc2UgUHJlZGljdE51bWJlcjoKLSAgICAgICAgcmV0dXJuICJwLW51bWJlciI7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJwLXRvcCI7Ci0gICAgfQorICAgIFZhbHVl
UHJvZmlsZTo6U3RhdGlzdGljcyBzdGF0aXN0aWNzOworICAgIHByb2ZpbGUuY29tcHV0ZVN0YXRp
c3RpY3MoZ2xvYmFsRGF0YSwgc3RhdGlzdGljcyk7CisgICAgCisgICAgaWYgKCFzdGF0aXN0aWNz
LnNhbXBsZXMpCisgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAKKyAgICBpZiAoc3Rh
dGlzdGljcy5pbnQzMnMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gRHlu
YW1pY1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0SW50MzI7CisgICAgCisgICAgaWYgKHN0YXRpc3Rp
Y3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBEeW5hbWlj
UHJlZGljdGlvblRhZyB8IFByZWRpY3REb3VibGU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3Mu
aW50MzJzICsgc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAg
ICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE51bWJlcjsKKyAgICAKKyAg
ICBpZiAoc3RhdGlzdGljcy5hcnJheXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICBy
ZXR1cm4gRHluYW1pY1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0QXJyYXk7CisgICAgCisgICAgaWYg
KHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4g
RHluYW1pY1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Q2VsbDsKKyAgICAKKyAgICByZXR1cm4gRHlu
YW1pY1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0VG9wOwogfQogI2VuZGlmCiAKQEAgLTM1Niw2ICs0
MDcsMzMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoaXNDb25zdGFudCgpKTsKICAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlT2ZK
U0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNv
bnN0YW50TnVtYmVyKCkpLmdldCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW50MzJDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBpc0NvbnN0
YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0ludDMyKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29k
ZUJsb2NrKS5pc051bWJlcigpOworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
SW50MzJDb25zdGFudChjb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0
YW50KGNvZGVCbG9jaykuYXNJbnQzMigpOworICAgIH0KKworICAgIGRvdWJsZSB2YWx1ZU9mRG91
YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBBU1NFUlQo
aXNEb3VibGVDb25zdGFudChjb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0Nv
bnN0YW50KGNvZGVCbG9jaykudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgfQogCiAgICAgYm9v
bCBoYXNMb2NhbCgpCiAgICAgewpAQCAtNDcwLDcgKzU0OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KG1fb3BJbmZvMik7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRp
Y3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhh
c1ByZWRpY3Rpb24oKSk7CiAgICAgICAgIApAQCAtNDc4LDE2ICs1NTYsMTkgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICAvLyB0byBoZWFwIGxvYWRzIGFzIHdlbGwgYXMgY2FsbHMgaXMgbm90IHBy
b2ZpdGFibGUsIGFzIHRoZXNlIHByZWRpY3Rpb25zCiAgICAgICAgIC8vIGFyZSB3cm9uZyB0b28g
b2Z0ZW4uIEhlbmNlLCB0aGlzIGNvbXBsZXRlbHkgaWdub3JlcyBzdGF0aWMgcHJlZGljdGlvbnMu
CiAgICAgICAgIGlmIChzb3VyY2UgPT0gU3RhdGljUHJlZGljdGlvbikKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGlmIChw
cmVkaWN0aW9uID09IFByZWRpY3ROb25lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKHNvdXJjZSA9PSBEeW5h
bWljUHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICBtX29wSW5mbzIgfD0gRHluYW1pY1By
ZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOworICAgICAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRp
Y3Rpb24gPSBEeW5hbWljUHJlZGljdGlvblRhZyB8IHByZWRpY3Rpb247CisgICAgICAgIGJvb2wg
cmVzdWx0ID0gbV9vcEluZm8yICE9IG5ld1ByZWRpY3Rpb247CisgICAgICAgIG1fb3BJbmZvMiB8
PSBuZXdQcmVkaWN0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLQorICAgIAog
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvcGFnYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdGlvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzExIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdQcm9wYWdhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
ICYmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUHJvcGFnYXRvciB7
CitwdWJsaWM6CisgICAgUHJvcGFnYXRvcihHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaykK
KyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX3Byb2Zp
bGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICB7CisgICAgICAgIG1fcHJlZGljdGlvbnMucmVz
aXplKG1fZ3JhcGguc2l6ZSgpKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaSA9IDA7IGkgPCBt
X2dyYXBoLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9wcmVkaWN0aW9uc1tpXSA9IFByZWRp
Y3ROb25lOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeHBvaW50KCkKKyAgICB7CisjaWYgREZH
X0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgZG8g
eworICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9y
IGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCisgICAgICAgICAgICAvLyBERlMtc29ydGVk
IGNvZGUuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3Bh
Z2F0ZUZvcndhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdh
dGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAor
ICAgICAgICAgICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBv
bmVzKSByZXNlbWJsZSBiYWNrd2FyZCBmbG93LgorICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNh
cHR1cmVzIHR3byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQK
KyAgICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJj
dWl0cyBiYWNrd2FyZCBmbG93LgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIERv
IGFub3RoZXIgZm9yd2FyZCBwYXNzIGJlY2F1c2UgZm9yd2FyZCBwYXNzZXMgYXJlIG9uIGF2ZXJh
Z2UgbW9yZQorICAgICAgICAgICAgLy8gcHJvZml0YWJsZS4KKyAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAgICAgICB9IHdo
aWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRQcmVk
aWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIGlmIChtX3By
ZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSA9PSBwcmVkaWN0aW9uKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgbV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gPSBw
cmVkaWN0aW9uOworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICB2
b2lkIG1lcmdlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAg
ICAgICBpZiAoREZHOjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRl
eF0sIHByZWRpY3Rpb24pKQorICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwcm9wYWdhdGVOb2RlKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKKyAgICAgICAgc3dpdGNoIChvcCkgewor
ICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBu
b2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0SW50MzIsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxs
ID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheSgmbV9nbG9i
YWxEYXRhLCBjZWxsKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJl
ZGljdGlvbihQcmVkaWN0QXJyYXksIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RDZWxsLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKKyAg
ICAgICAgICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAg
ICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAg
ICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJlZGlj
dGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIER5bmFtaWNQcmVkaWN0
aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9y
OgorICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAg
ICAgIGNhc2UgQml0VVJTaGlmdDoKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAg
ICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJl
ZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbiA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKHByZWRpY3Rpb24pKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3ROdW1iZXIsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFs
dWVBZGQ6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNb
bm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVk
aWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlz
RHluYW1pY1ByZWRpY3Rpb24obGVmdCkgJiYgaXNEeW5hbWljUHJlZGljdGlvbihyaWdodCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVy
UHJlZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVk
aWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIER5bmFt
aWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgRHluYW1p
Y1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBB
cml0aFN1YjoKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgUHJlZGljdGVk
VHlwZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSAmJiBpc0R5
bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAg
ICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIER5bmFtaWNQ
cmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBt
ZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICAgICAgc2V0UHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBEeW5hbWljUHJlZGljdGlvbikp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIExvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgY2Fz
ZSBDb21wYXJlU3RyaWN0RXE6CisgICAgICAgIGNhc2UgSW5zdGFuY2VPZjogeworICAgICAgICAg
ICAgLy8gVGhpcyBpcyBzYWQsIGFzIHdlIGRvbid0IGhhdmUgYSBib29sZWFuIHByZWRpY3Rpb24s
IGV2ZW4gdGhvdWdoIHdlIGVhc2lseQorICAgICAgICAgICAgLy8gY291bGQuCisgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIER5bmFtaWNQcmVkaWN0
aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAgIGNhc2Ug
R2V0QnlWYWw6CisgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsK
KyAgICAgICAgICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigp
KSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBDb252ZXJ0VGhpczogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0Q2VsbCwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKKyAg
ICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3JhcGguZ2V0R2xvYmFsVmFy
UHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKTsKKyAgICAgICAgICAgIGlmIChpc0R5bmFtaWNQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihw
cmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBt
X2dyYXBoLnByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgbV9wcmVkaWN0aW9uc1tu
b2RlLmNoaWxkMSgpXSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgRHluYW1pY1ByZWRpY3Rpb24pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJldHVy
biBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgorICAgICAgICBjYXNlIERGRzo6SnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6Cisg
ICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgorICAgICAgICBj
YXNlIFBoaToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIC8vIFRo
ZXNlIGdldCBpZ25vcmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBwcm9maWxpbmcgZm9yIHRoZW0s
IHlldC4KKyAgICAgICAgY2FzZSBSZXNvbHZlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgor
ICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IHByb3BhZ2F0ZUZvcndhcmQoKQorICAgIHsKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAg
ICBwcmludGYoIlByb3BhZ2F0aW5nIGZvcndhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRp
ZgorICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dy
YXBoLnNpemUoKTsgKyttX2NvbXBpbGVJbmRleCkKKyAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGUo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0
ZUJhY2t3YXJkKCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRm
KCJQcm9wYWdhdGluZyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAg
ICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxlSW5kZXgt
LSA+IDA7KQorICAgICAgICAgICAgcHJvcGFnYXRlTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4
XSk7CisgICAgfQorICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEpTR2xvYmFsRGF0YSYg
bV9nbG9iYWxEYXRhOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgCisgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4Owor
ICAgIAorICAgIFZlY3RvcjxQcmVkaWN0ZWRUeXBlLCAxNj4gbV9wcmVkaWN0aW9uczsKKworI2lm
IERGR19ERUJVR19WRVJCT1NFCisgICAgdW5zaWduZWQgbV9jb3VudDsKKyNlbmRpZgorICAgIAor
ICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKwordm9pZCBwcm9wYWdhdGUoR3JhcGgmIGdyYXBoLCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFT
U0VSVChjb2RlQmxvY2spOworICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBBU1NFUlQocHJvZmlsZWRCbG9jayk7CisgICAgCisgICAg
UHJvcGFnYXRvciBwcm9wYWdhdG9yKGdyYXBoLCAqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBwcm9m
aWxlZEJsb2NrKTsKKyAgICBwcm9wYWdhdG9yLmZpeHBvaW50KCk7CisgICAgCisjaWYgREZHX0RF
QlVHX1ZFUkJPU0UKKyAgICBncmFwaC5kdW1wKGNvZGVCbG9jayk7CisjZW5kaWYKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIEVO
QUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1Byb3BhZ2F0aW9uX2gKKyNkZWZpbmUgREZHUHJvcGFnYXRpb25faAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpTR2xvYmFsRGF0YTsKKworbmFtZXNwYWNlIERGRyB7
CisKKy8vIFByb3BhZ2F0ZSBkeW5hbWljIHByZWRpY3Rpb25zIGZyb20gdmFsdWUgc291cmNlcyB0
byB2YXJpYWJsZXMuCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQordm9pZCBwcm9w
YWdhdGUoR3JhcGgmLCBKU0dsb2JhbERhdGEqLCBDb2RlQmxvY2sqKTsKKyNlbHNlCitpbmxpbmUg
dm9pZCBwcm9wYWdhdGUoR3JhcGgmLCBKU0dsb2JhbERhdGEqLCBDb2RlQmxvY2sqKSB7IH0KKyNl
bmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZgorI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0NDg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTkzLDYgKzU5Myw5IEBAIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMs
IENhbGxMaW4KICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CiAgICAg
ICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERh
dGEoKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLmhvdFBhdGhPdGhlciwgY29kZVB0cik7CisgICAgICAgIAorICAgICAgICBpZiAoY2Fs
bGVlQ29kZUJsb2NrKQorICAgICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdD
YWxsKCZjYWxsTGlua0luZm8pOwogICAgIH0KICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAkocmV2
aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxOCw2ICsyMTgsOCBAQCBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9k
ZTo6Tm9kZShIYW5kbGVIZWFwCiAgICAgOiBtX2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKICAgICAs
IG1fd2Vha093bmVyKDApCiAgICAgLCBtX3dlYWtPd25lckNvbnRleHQoMCkKKyAgICAsIG1fcHJl
digwKQorICAgICwgbV9uZXh0KDApCiB7CiB9CiAKQEAgLTIyNSw2ICsyMjcsOCBAQCBpbmxpbmUg
SGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShXVEY6OlNlbnRpCiAgICAgOiBtX2hhbmRsZUhlYXAoMCkK
ICAgICAsIG1fd2Vha093bmVyKDApCiAgICAgLCBtX3dlYWtPd25lckNvbnRleHQoMCkKKyAgICAs
IG1fcHJldigwKQorICAgICwgbV9uZXh0KDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxNiBAQCBKSVQ6OkpJVChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCCiB7CiB9CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NP
TVBJTEFUSU9OKQordm9pZCBKSVQ6OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25D
aGVja0tpbmQga2luZCkKK3sKKyAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNp
Z25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gMSA6IDMw
KSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRlQ291bnRlcikpOworICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNr
ID8gY3RpX29wdGltaXplX2Zyb21fbG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CisgICAg
c3R1YkNhbGwuY2FsbCgpOworICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOworfQorI2VuZGlm
CisKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQog
ewpAQCAtMTAyLDYgKzExMiw4IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBz
dHViQ2FsbC5jYWxsKHRpbWVvdXRDaGVja1JlZ2lzdGVyKTsKICAgICBzdHViQ2FsbC5nZXRBcmd1
bWVudCgwLCByZWdUMSwgcmVnVDApOyAvLyByZWxvYWQgbGFzdCByZXN1bHQgcmVnaXN0ZXJzLgog
ICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7CisgICAgCisgICAgZW1pdE9wdGltaXphdGlvbkNo
ZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7CiB9CiAjZWxzZQogdm9pZCBKSVQ6OmVtaXRUaW1l
b3V0Q2hlY2soKQpAQCAtMTExLDYgKzEyMyw4IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNr
KCkKICAgICBza2lwVGltZW91dC5saW5rKHRoaXMpOwogCiAgICAga2lsbExhc3RSZXN1bHRSZWdp
c3RlcigpOworICAgIAorICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9u
Q2hlY2spOwogfQogI2VuZGlmCiAKQEAgLTYyMyw3ICs2MzcsNyBAQCBKSVRDb2RlIEpJVDo6cHJp
dmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAgICAgICAq
ZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hl
Y2spOwotCisgICAgCiAgICAgcmV0dXJuIEpJVENvZGUocGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
KCksIEpJVENvZGU6OkJhc2VsaW5lSklUKTsKIH0KIApAQCAtNjM3LDYgKzY1MSw5IEBAIHZvaWQg
SklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ28KICAgICAgICAgQVNTRVJUKCFjYWxs
TGlua0luZm8tPmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQo
Kmdsb2JhbERhdGEsIGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwgY29kZSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5j
b21pbmdDYWxsKGNhbGxMaW5rSW5mbyk7CiAgICAgfQogCiAgICAgLy8gcGF0Y2ggdGhlIGNhbGwg
c28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBsaW5rLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIExvYWRzIHRoZSBjaGFyYWN0ZXIgdmFsdWUgb2YgYSBzaW5nbGUgY2hhcmFj
dGVyIHN0cmluZyBpbnRvIGRzdC4KICAgICAgICAgdm9pZCBlbWl0TG9hZENoYXJhY3RlclN0cmlu
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcyk7CiAg
ICAgICAgIAorICAgICAgICBlbnVtIE9wdGltaXphdGlvbkNoZWNrS2luZCB7IExvb3BPcHRpbWl6
YXRpb25DaGVjaywgUmV0T3B0aW1pemF0aW9uQ2hlY2sgfTsKKyNpZiBFTkFCTEUoVElFUkVEX0NP
TVBJTEFUSU9OKQorICAgICAgICB2b2lkIGVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRp
b25DaGVja0tpbmQpOworI2Vsc2UKKyAgICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2so
T3B0aW1pemF0aW9uQ2hlY2tLaW5kKSB7IH0KKyNlbmRpZgorICAgICAgICAKICAgICAgICAgdm9p
ZCBlbWl0VGltZW91dENoZWNrKCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICB2b2lkIHByaW50
Qnl0ZWNvZGVPcGVyYW5kVHlwZXModW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiA5
NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsVmFy
YXJnc1Nsb3dDYXNlKEkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXph
dGlvbkNoZWNrKTsKKyAgICAKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwogCiAgICAgZW1pdExvYWQoZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtMTE4
LDYgKzEyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmUKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlv
bkNoZWNrKTsKKyAgICAKICAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMjMgKzI3LDUwIEBACiAjZGVmaW5lIEpJVENvZGVfaAogCiAjaWYg
RU5BQkxFKEpJVCkKLQogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUu
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJQcm9maWxl
ci5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgewogCisjaWYgRU5BQkxFKEpJVCkKICAgICBj
bGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxlOworI2VuZGlmCiAgICAg
CiAgICAgY2xhc3MgSklUQ29kZSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgQ29kZVB0cjsKKyNlbHNlCisgICAgICAgIEpJVENvZGUoKSB7IH0KKyNlbmRp
ZgogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBKSVRUeXBlIHsgSG9zdENhbGxUaHVuaywgQmFz
ZWxpbmVKSVQsIERGR0pJVCB9OwotCisgICAgICAgIAorICAgICAgICBzdGF0aWMgSklUVHlwZSBi
b3R0b21UaWVySklUKCkKKyAgICAgICAgeworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04p
CisgICAgICAgICAgICByZXR1cm4gQmFzZWxpbmVKSVQ7CisjZWxzZQorICAgICAgICAgICAgcmV0
dXJuIERGR0pJVDsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
SklUVHlwZSB0b3BUaWVySklUKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIERGR0pJ
VDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJK
SVQoSklUVHlwZSBqaXRUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGppdFR5cGUsIGppdFR5cGUgPT0gQmFzZWxpbmVKSVQgfHwgaml0VHlwZSA9PSBERkdKSVQpOwor
ICAgICAgICAgICAgcmV0dXJuIERGR0pJVDsKKyAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFC
TEUoSklUKQogICAgICAgICBKSVRDb2RlKCkKICAgICAgICAgewogICAgICAgICB9CkBAIC01Myw3
ICs4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlw
ZSkKICAgICAgICAgewogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgb3BlcmF0
b3IgISgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhbV9yZWYubV9jb2Rl
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0xMjQsMTAgKzE1MSw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIENvZGVSZWYgbV9yZWY7CiAgICAgICAgIEpJVFR5cGUgbV9qaXRUeXBlOwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgfTsKIAogfTsKIAogI2VuZGlmCi0KLSNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA5
NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1Miw2ICs0NTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9h
cmd1bWVudHMoSW5zCiAKIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRp
b25DaGVjayk7CisgICAgCiAgICAgQVNTRVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsK
ICAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJl
dHVyblZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtNDcyLDYgKzQ3NCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmUKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsK
KyAgICAKICAgICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0gcmVnVDEpOwogICAgIEFTU0VS
VChyZWdUMSAhPSByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVS
ZWdpc3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxNiw2ICsxODE2LDMyIEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX2NoZWNrX2hhc18KICAgICBWTV9USFJPV19F
WENFUFRJT05fQVRfRU5EKCk7CiB9CiAKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGlt
aXplX2Zyb21fbG9vcCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CisgICAgCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKwor
ICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJh
bWUsIHNjb3BlQ2hhaW4pOworICAgIGlmIChlcnJvcikKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZnJvbSBsb29wIGZhaWxlZC5cbiIpOwor
fQorCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX3JldCkKK3sKKyAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisgICAgCisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKworICAgIEpTT2JqZWN0KiBlcnJvciA9
IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOworICAg
IGlmIChlcnJvcikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBvcHRpbWl6ZWQg
Y29tcGlsYXRpb24gZnJvbSByZXQgZmFpbGVkLlxuIik7Cit9CisKIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9pbnN0YW5jZW9mKQogewogICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmgJKHJldmlzaW9uIDk0NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNiArNDIzLDggQEAgZXh0ZXJuICJDIiB7CiAgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbihTVFVCX0FSR1NfREVDTEFS
QVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3Rocm93X3JlZmVy
ZW5jZV9lcnJvcihTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIHZvaWQgSklUX1NUVUIgY3Rp
X29wdGltaXplX2Zyb21fbG9vcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wdGltaXplX2Zyb21fcmV0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAg
dm9pZCogSklUX1NUVUIgY3RpX29wX2NhbGxfYXJpdHlDaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayhTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2ppdENv
bXBpbGUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2NiArMjgsMTYgQEAKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiSklULmgi
CiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiVVN0cmluZ0J1aWxkZXIuaCIKICNpbmNs
dWRlICJWZWN0b3IuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotI2luY2x1ZGUgIkRGR0J5dGVD
b2RlUGFyc2VyLmgiCi0jaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKLSNlbmRpZgotCiBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEV4ZWN1dGFibGVCYXNlOjpzX2luZm8gPSB7
ICJFeGVjdXRhYmxlIiwgMCwgMCwgMCB9OwogCi0jaWYgRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUo
REZHX0pJVCkKLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSkKLXsKLSNpZiBFTkFCTEUoREZHX0pJ
VF9SRVNUUklDVElPTlMpCi0gICAgLy8gRklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQgc3VwcG9y
dGVkLCBkb24ndCBib3RoZXIgc2Nhbm5pbmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBhbnkg
anVtcCB0YXJnZXRzLgotICAgIGlmIChjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNU
SU9OUykKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgREZHOjpHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVC
bG9jay0+bV9udW1WYXJzKTsKLSAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJs
b2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgREZHOjpKSVRDb21waWxlciBkYXRh
Rmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7Ci0gICAgZGF0YUZsb3dKSVQuY29t
cGlsZShqaXRDb2RlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5REZH
Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhl
YywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQotewotI2lmIEVOQUJMRShERkdfSklUX1JF
U1RSSUNUSU9OUykKLSAgICAvLyBGSVhNRTogTm8gZmxvdyBjb250cm9sIHlldCBzdXBwb3J0ZWQs
IGRvbid0IGJvdGhlciBzY2FubmluZyB0aGUgYnl0ZWNvZGUgaWYgdGhlcmUgYXJlIGFueSBqdW1w
IHRhcmdldHMuCi0gICAgaWYgKGNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05T
KQotCi0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBERkc6OkdyYXBoIGRmZyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycywgY29kZUJsb2Nr
LT5tX251bVZhcnMpOwotICAgIGlmICghcGFyc2UoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2sp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY2FsbGVlQXJnc0V4ZWMpCi0gICAg
ICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcyhjYWxsZWVBcmdzRXhlYyk7Ci0KLSAgICBERkc6
OkpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKLSAg
ICBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNo
ZWNrKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQotc3Rh
dGljIGJvb2wgdHJ5REZHQ29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJikg
eyByZXR1cm4gZmFsc2U7IH0KLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGVGdW5jdGlvbihFeGVj
U3RhdGUqLCBFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLSNl
bmRpZiAvLyBFTkFCTEUoSklUKQotICAgIAogdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2Rl
KCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtMTY2LDggKzExNiwxOCBAQCBGdW5jdGlvbkV4ZWN1
dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShFCiB7CiB9CiAKK0pTT2JqZWN0KiBFdmFsRXhlY3V0
YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSkKK3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNH
bG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CisgICAgSlNPYmpl
Y3QqIGVycm9yID0gMDsKKyAgICBpZiAobV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0g
SklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChl
eGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9ldmFsQ29kZUJsb2Nr
LT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIHJl
dHVybiBlcnJvcjsKK30KIAotSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJu
YWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09i
amVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQog
ewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xODMsMjYgKzE0Myw0MSBAQCBKU09iamVj
dCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAg
IEFTU0VSVCghbV9ldmFsQ29kZUJsb2NrKTsKLSAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0
cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVy
KCksIHNjb3BlQ2hhaW5Ob2RlLT5sb2NhbERlcHRoKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVH
ZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5v
ZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCks
IG1fZXZhbENvZGVCbG9jay5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91
c0NvZGVCbG9jayA9IG1fZXZhbENvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRU
eXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsK
KyAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBn
bG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlQ2hhaW5Ob2RlLT5sb2NhbERl
cHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29k
ZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFs
Tm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUo
KSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCAhIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdl
bmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVy
YXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9ldmFsQ29kZUJsb2NrLmNsZWFyKCk7Cisg
ICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9j
az4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGV2YWxO
b2RlLT5kZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KIAog
ICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOworICAgIG1fZXZhbENvZGVCbG9jay0+Y29weURh
dGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmds
b2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gdHJ5
REZHQ29tcGlsZShleGVjLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwp
OwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0g
ZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAg
ICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlKGV4ZWMsIG1fZXZhbENvZGVCbG9jay5n
ZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7CisgICAgICAgIGlmIChkZmdDb21waWxlZCkKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpIHx8ICFtX2V2YWxD
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmhhc0luY29taW5nQ2FsbHMoKSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKG1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgewor
ICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGFscmVhZHkgYW4gYWx0ZXJuYXRpdmUgcGllY2Ug
b2YgY29kZSBjb21waWxlZCB3aXRoIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgLy8gSklU
LCBzbyB3ZSBjYW4gc2lsZW50bHkgZmFpbC4KKyAgICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxv
Y2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+
cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jay0+
ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUo
c2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jay5nZXQoKSk7CisgICAg
ICAgIH0KICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29k
ZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX2V2YWxDb2Rl
QmxvY2stPmRpc2NhcmRCeXRlY29kZSgpOwogI2VuZGlmCisgICAgICAgIG1fZXZhbENvZGVCbG9j
ay0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7
CiAgICAgfQogI2VuZGlmCiAKQEAgLTI2MSwxMCArMjM2LDE5IEBAIEpTT2JqZWN0KiBQcm9ncmFt
RXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCi1KU09i
amVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0
YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSkKIHsKLSAgICBBU1NFUlQoIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NF
UlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAg
aWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJK
SVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5v
ZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgp
KSk7CisgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7
Cit9CiAKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUpCit7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
QEAgLTI3NywyNSArMjYxLDQwIEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZUludGUKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9k
ZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogICAgIAotICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IGFk
b3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVj
dCwgc291cmNlKCkucHJvdmlkZXIoKSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4g
Z2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQo
KSwgc2NvcGVDaGFpbk5vZGUsICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3Jh
bUNvZGVCbG9jay5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVC
bG9jayA9IG1fcHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBl
ID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAg
ICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlz
LCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZpb3Vz
Q29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwg
c2NvcGVDaGFpbk5vZGUsICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNv
ZGVCbG9jay5nZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRl
Y29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6
OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdl
bmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAg
ICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxv
Y2s+KG1fcHJvZ3JhbUNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBw
cm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAg
ICB9CiAKICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX3Byb2dyYW1Db2Rl
QmxvY2stPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAg
IGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdD
b21waWxlZCA9IHRyeURGR0NvbXBpbGUoZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBt
X2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9v
bCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpE
RkdKSVQpCisgICAgICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBt
X3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwpOworICAgICAgICBpZiAo
ZGZnQ29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJs
b2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAg
ICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2pp
dENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBt
X3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpOworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVk
Q29kZSgpKQogICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUo
KTsKICNlbmRpZgorICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRD
b2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgogCkBA
IC0zNDIsNyArMzQxLDI5IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiAg
ICAgQmFzZTo6Y2xlYXJDb2RlKCk7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpCitKU09iamVjdCogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhl
YykKK3sKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3Qp
OworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgSlNPYmplY3QqIGVycm9y
ID0gMDsKKyAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29k
ZTo6dG9wVGllckpJVCgpKQorICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwo
ZXhlYywgc2NvcGVDaGFpbk5vZGUsIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpuZXh0VGllckpJ
VChtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fY29k
ZUJsb2NrRm9yQ2FsbCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIEFTU0VSVChleGVjLT5n
bG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgp
KQorICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29w
ZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PmdldEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsK
KyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
bXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUg
aml0VHlwZSkKIHsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKQEAgLTM1OCwxMSAr
Mzc5LDEyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2Jq
ZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIG1fY29k
ZUJsb2NrRm9yQ2FsbCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5j
dGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3Rh
cnRPZmZzZXQoKSwgZmFsc2UpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVy
YXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFp
bk5vZGUsIG1fY29kZUJsb2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JD
YWxsLmdldCgpKSkpOworICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0g
bV9jb2RlQmxvY2tGb3JDYWxsLnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklU
Q29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fY29k
ZUJsb2NrRm9yQ2FsbCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5j
dGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3Rh
cnRPZmZzZXQoKSwgZmFsc2UsIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93
blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdl
bmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDYWxsLT5z
eW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksICEhbV9jb2RlQmxvY2tGb3JD
YWxsLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxh
dGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgo
ZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX2NvZGVCbG9j
a0ZvckNhbGwuY2xlYXIoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDYWxsLT5yZWxlYXNl
QWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJl
dHVybiBleGNlcHRpb247CiAgICAgfQpAQCAtMzczLDE3ICszOTUsMzEgQEAgSlNPYmplY3QqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVC
bG9ja0ZvckNhbGwtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0
YSgpOworICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsK
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQo
KSkgewotICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKGV4
ZWMsIGNhbGxlZUFyZ3NFeGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksIG1faml0Q29kZUZv
ckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGlmICghZGZn
Q29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYg
KGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBE
Rkc6OnRyeUNvbXBpbGVGdW5jdGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tG
b3JDYWxsLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2spOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChtX2Nv
ZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2
ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDYWxsLT5yZWxlYXNlQWx0
ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5kb250T3B0
aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUgPSBtX2Nv
ZGVCbG9ja0ZvckNhbGwtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklU
Ojpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNhbGwu
Z2V0KCksICZtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotCisgICAgICAgIH0KICNp
ZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRv
cjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwt
PmRpc2NhcmRCeXRlY29kZSgpOwogI2VuZGlmCisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9j
a0ZvckNhbGwtPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjYWxsZWVBcmdz
RXhlYyk7CkBAIC00MDMsOCArNDM5LDEwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVGb3IKICAgICByZXR1cm4gMDsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CisgICAgVU5V
U0VEX1BBUkFNKGppdFR5cGUpOworICAgIAogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRh
OwogICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2Vy
LT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAs
IDAsIG1fc291cmNlLCBtX3BhcmFtZXRlcnMuZ2V0KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJz
ZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsICZleGNlcHRpb24pOwpAQCAtNDE5LDExICs0NTcsMTIg
QEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0
KCk7CiAKLSAgICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBG
dW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCku
c3RhcnRPZmZzZXQoKSwgdHJ1ZSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNo
YWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LmdldCgpKSkpOworICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3Vz
Q29kZUJsb2NrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QucmVsZWFzZSgpOworICAgIEFTU0VS
VCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVC
bG9jayk7CisgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rp
b25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnBy
b3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRydWUsIHByZXZpb3VzQ29kZUJsb2Nr
LnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFk
b3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwg
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LmdldCgpLCAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpID8g
Qnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJh
dG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9y
LT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigp
OworICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8
RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJu
YXRpdmUoKSk7CiAgICAgICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBl
eGNlcHRpb247CiAgICAgfQpAQCAtNDM0LDE0ICs0NzMsMzAgQEAgSlNPYmplY3QqIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKIAogICAgIGJvZHktPmRlc3Ryb3lEYXRh
KCk7CisgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZl
KCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNl
SklUKCkpIHsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwg
Jm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgYm9vbCBkZmdD
b21waWxlZCA9IGZhbHNlOworICAgICAgICAvLyBGSVhNRTogTWFrZSBpdCBwb3NzaWJsZSB0byBj
b21waWxlIGNvbnN0cnVjdG9ycyB3aXRoIERGRy4KKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7
CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkp
CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkt
PnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
IChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAg
ICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlv
bkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgp
KTsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+ZG9udE9wdGltaXpl
QW55dGltZVNvb24oKTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3Qg
PSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LmdldCgpLCAmbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0
ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPmRpc2NhcmRCeXRlY29kZSgpOwogI2VuZGlmCisgICAgICAgIAor
ICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JD
b25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKICAgICB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNiwxMCArMzA2LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFs
T2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBp
ZiAoIW1fZXZhbENvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRl
cm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21w
aWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQo
KSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9ldmFsQ29kZUJsb2NrKTsKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKIAog
ICAgICAgICBFdmFsQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsKQEAg
LTM0NCw3ICszNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4
ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBFdmFsRXhlY3V0YWJsZShFeGVjU3Rh
dGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVj
dCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6
SklUVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIApAQCAtMzY5LDExICszNzEsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5
bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAg
ICAgICAgICAgIGlmICghbV9wcm9ncmFtQ29kZUJsb2NrKQotICAgICAgICAgICAgICAgIGVycm9y
ID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgICAg
ICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6
Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX3Byb2dy
YW1Db2RlQmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKKyAg
ICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKKwogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Byb2dyYW1Db2RlQmxvY2spOwpAQCAtNDAz
LDcgKzQwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0
YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0
ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVy
bmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBl
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAg
ICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogCkBAIC00NTAsMTEgKzQ1NCwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAg
ICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNhbGwpCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21w
aWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYyk7
CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsK
ICAgICAgICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAg
ICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKKyAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0
YXRlKiBjYWxsZWVBcmdzRXhlYyA9IDApOworCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JD
YWxsKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9y
Q2FsbDsKQEAgLTQ3MSwxMSArNDc3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAg
ICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrRm9y
Q29uc3RydWN0KQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdElu
dGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNv
bXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6
Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0K
IAorICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSopOworCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDb25z
dHJ1Y3QoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3Q7CkBAIC01MDEsNiArNTA5LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuIGNvbXBpbGVGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwog
ICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZv
cihFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb21waWxl
T3B0aW1pemVkRm9yIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgY2FsbGZyYW1lIHNldCB1
cCB0byBjYWxsIHRoaXMgZnVuY3Rpb24sCisgICAgICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIG1h
a2Ugc3BlY3VsYXRpdmUgb3B0aW1pemF0aW9ucyBiYXNlZCBvbiB0aGUgYXJndW1lbnRzLgorICAg
ICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChleGVj
LT5jYWxsZWUoKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpOworICAgICAgICAgICAg
QVNTRVJUKGFzRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKSA9PSB0aGlz
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3Bl
Q2hhaW5Ob2RlLCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25z
dHJ1Y3QpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3Qo
ZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29s
IGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkBAIC01NDksOCArNTcxLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEm
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVz
ZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wpOwogICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291
cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBi
b29sKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpOwotICAgICAg
ICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklU
Q29kZTo6SklUVHlwZSk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50
ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsK
ICAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA6IDMxOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gOTQ0ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2MCwxMSAr
OTYwLDIzIEBACiAjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDEKICNlbmRpZgogCisjaWYgIWRlZmlu
ZWQoRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTikgJiYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5l
IEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMAorI2VuZGlmCisKIC8qIEN1cnJlbnRseSBvbmx5
IGltcGxlbWVudGVkIGZvciBKU1ZBTFVFNjQsIG9ubHkgdGVzdGVkIG9uIFBMQVRGT1JNKE1BQykg
Ki8KICNpZiAhZGVmaW5lZChFTkFCTEVfVkFMVUVfUFJPRklMRVIpICYmIEVOQUJMRShKSVQpICYm
IFVTRShKU1ZBTFVFNjQpICYmIFBMQVRGT1JNKE1BQykKICNkZWZpbmUgRU5BQkxFX1ZBTFVFX1BS
T0ZJTEVSIDAKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX0RZTkFNSUNfT1BUSU1JWkFU
SU9OKQorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pICYmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKKyNkZWZpbmUgRU5BQkxFX0RZTkFNSUNfT1BUSU1JWkFUSU9OIDEKKyNlbHNlCisjZGVm
aW5lIEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiAwCisjZW5kaWYKKyNlbmRpZgorCiAjaWYg
IWRlZmluZWQoRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSkgJiYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQogI2RlZmluZSBFTkFCTEVfVkVSQk9TRV9WQUxVRV9QUk9GSUxFIDAKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5o
CShyZXZpc2lvbiA5NDQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxM
aW5rZWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDI0ICs0MSw2MyBAQCBuYW1lc3BhY2Ug
V1RGIHsKIAogZW51bSBTZW50aW5lbFRhZyB7IFNlbnRpbmVsIH07CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBOb2RlPiBjbGFzcyBTZW50aW5lbExpbmtlZExpc3QgewordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEJhc2ljUmF3U2VudGluZWxOb2RlIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIE5v
ZGUqIGl0ZXJhdG9yOworICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKFNlbnRpbmVsVGFnKQorICAg
ICAgICA6IG1fbmV4dCgwKQorICAgICAgICAsIG1fcHJldigwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUoKQorICAgICAgICA6IG1fbmV4dCgwKQorICAgICAg
ICAsIG1fcHJldigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRQcmV2KEJhc2lj
UmF3U2VudGluZWxOb2RlKiBwcmV2KSB7IG1fcHJldiA9IHByZXY7IH0KKyAgICB2b2lkIHNldE5l
eHQoQmFzaWNSYXdTZW50aW5lbE5vZGUqIG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorICAgIAor
ICAgIFQqIHByZXYoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9wcmV2KTsgfQorICAgIFQq
IG5leHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9uZXh0KTsgfQorICAgIAorICAgIGJv
b2wgaXNPbkxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhbV9wcmV2ID09ICEh
bV9uZXh0KTsKKyAgICAgICAgcmV0dXJuICEhbV9wcmV2OworICAgIH0KKyAgICAKKyAgICB2b2lk
IHJlbW92ZSgpOworICAgIAorcHJpdmF0ZToKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9u
ZXh0OworICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKiBtX3ByZXY7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZSA9IFQ+IGNsYXNzIFNlbnRpbmVsTGlua2VkTGlz
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKIAogICAgIFNlbnRpbmVsTGlu
a2VkTGlzdCgpOwogCi0gICAgdm9pZCBwdXNoKE5vZGUqKTsKLSAgICBzdGF0aWMgdm9pZCByZW1v
dmUoTm9kZSopOworICAgIHZvaWQgcHVzaChUKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlKFQq
KTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCk7CiAgICAgaXRlcmF0b3IgZW5kKCk7CiAKIHByaXZh
dGU6Ci0gICAgTm9kZSBtX2hlYWRTZW50aW5lbDsKLSAgICBOb2RlIG1fdGFpbFNlbnRpbmVsOwor
ICAgIFJhd05vZGUgbV9oZWFkU2VudGluZWw7CisgICAgUmF3Tm9kZSBtX3RhaWxTZW50aW5lbDsK
IH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgU2VudGluZWxMaW5rZWRMaXN0
PE5vZGU+OjpTZW50aW5lbExpbmtlZExpc3QoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQg
QmFzaWNSYXdTZW50aW5lbE5vZGU8VD46OnJlbW92ZSgpCit7CisgICAgU2VudGluZWxMaW5rZWRM
aXN0PFQsIEJhc2ljUmF3U2VudGluZWxOb2RlPFQ+ID46OnJlbW92ZShzdGF0aWNfY2FzdDxUKj4o
dGhpcykpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5s
aW5lIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkK
ICAgICA6IG1faGVhZFNlbnRpbmVsKFNlbnRpbmVsKQogICAgICwgbV90YWlsU2VudGluZWwoU2Vu
dGluZWwpCiB7CkBAIC02OSwyMSArMTA4LDI0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBp
bmxpbmUgU2VudGluZWwKICAgICBtX3RhaWxTZW50aW5lbC5zZXROZXh0KDApOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxO
b2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpiZWdpbigpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBSYXdOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJh
d05vZGU+OjpiZWdpbigpCiB7Ci0gICAgcmV0dXJuIG1faGVhZFNlbnRpbmVsLm5leHQoKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1faGVhZFNlbnRpbmVsLm5leHQoKSk7CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgdHlwZW5hbWUgU2VudGluZWxMaW5rZWRMaXN0
PE5vZGU+OjppdGVyYXRvciBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OmVuZCgpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBSYXdOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJh
d05vZGU+OjplbmQoKQogewotICAgIHJldHVybiAmbV90YWlsU2VudGluZWw7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPigmbV90YWlsU2VudGluZWwpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgTm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpwdXNoKE5vZGUq
IG5vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHZv
aWQgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjpwdXNoKFQqIG5vZGUpCiB7CiAgICAg
QVNTRVJUKG5vZGUpOwotICAgIE5vZGUqIHByZXYgPSAmbV9oZWFkU2VudGluZWw7Ci0gICAgTm9k
ZSogbmV4dCA9IG1faGVhZFNlbnRpbmVsLm5leHQoKTsKKyAgICBBU1NFUlQoIW5vZGUtPnByZXYo
KSk7CisgICAgQVNTRVJUKCFub2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYg
PSAmbV9oZWFkU2VudGluZWw7CisgICAgUmF3Tm9kZSogbmV4dCA9IG1faGVhZFNlbnRpbmVsLm5l
eHQoKTsKIAogICAgIG5vZGUtPnNldFByZXYocHJldik7CiAgICAgbm9kZS0+c2V0TmV4dChuZXh0
KTsKQEAgLTkyLDE3ICsxMzQsMjUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB2
b2lkIFNlbgogICAgIG5leHQtPnNldFByZXYobm9kZSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBOb2RlPiBpbmxpbmUgdm9pZCBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92ZShOb2Rl
KiBub2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2
b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6cmVtb3ZlKFQqIG5vZGUpCiB7Ci0g
ICAgTm9kZSogcHJldiA9IG5vZGUtPnByZXYoKTsKLSAgICBOb2RlKiBuZXh0ID0gbm9kZS0+bmV4
dCgpOworICAgIEFTU0VSVChub2RlKTsKKyAgICBBU1NFUlQoISFub2RlLT5wcmV2KCkpOworICAg
IEFTU0VSVCghIW5vZGUtPm5leHQoKSk7CisgICAgCisgICAgUmF3Tm9kZSogcHJldiA9IG5vZGUt
PnByZXYoKTsKKyAgICBSYXdOb2RlKiBuZXh0ID0gbm9kZS0+bmV4dCgpOwogCiAgICAgcHJldi0+
c2V0TmV4dChuZXh0KTsKICAgICBuZXh0LT5zZXRQcmV2KHByZXYpOworICAgIAorICAgIG5vZGUt
PnNldFByZXYoMCk7CisgICAgbm9kZS0+c2V0TmV4dCgwKTsKIH0KIAogfQogCit1c2luZyBXVEY6
OkJhc2ljUmF3U2VudGluZWxOb2RlOwogdXNpbmcgV1RGOjpTZW50aW5lbExpbmtlZExpc3Q7CiAK
ICNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="102635"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106276</attachid>
            <date>2011-09-03 21:38:58 -0700</date>
            <delta_ts>2011-09-05 17:49:31 -0700</delta_ts>
            <desc>the patch - fix GTK</desc>
            <filename>dynopt_patch_10.diff</filename>
            <type>text/plain</type>
            <size>122907</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgwIEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
dGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAor
ICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0
b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2Rl
QmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNv
dW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3Vl
cyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bwor
ICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAg
ICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMs
IGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0
IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJz
dHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBz
dWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9y
bWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0
byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBz
dGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAg
Tm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlz
IGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFp
bGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYg
KHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3Bz
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZp
bGVzLmNtZDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzIpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhp
c3RpbmdFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRl
cm5hdGl2ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToK
KyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9j
azo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpj
b21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlND
OjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJs
b2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxl
Lmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OlZh
bHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3RpY3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6ZHluYW1pY2FsbHlQcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2UpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0
cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29t
cGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFy
Z3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEds
b2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0RvdWJs
ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZkpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmlzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0lu
dDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0RvdWJsZUNv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVPZkpTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSW50MzJDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZEb3VibGVDb25zdGFu
dCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGxQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjppc051bWJlclByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjptYWtlUHJlZGljdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmlzSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aXNEb3VibGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkludDMy
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhbHVlT2ZEb3VibGVDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RG
R1Byb3BhZ2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6Om1lcmdlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFn
YXRvcjo6cHJvcGFnYXRlRm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
cHJvcGFnYXRlQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAqIGhlYXAvSGFuZGxlSGVhcC5oOgorICAgICAgICAo
SlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRUaW1lb3V0Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGpp
dC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6dG9w
VGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om5leHRUaWVySklUKToKKyAgICAgICAg
KiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgor
ICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAg
KEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlND
OjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6
Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRG
b3IpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9TZW50aW5lbExp
bmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OkJhc2ljUmF3
U2VudGluZWxOb2RlKToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnNldFBy
ZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0TmV4dCk6CisgICAg
ICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpwcmV2KToKKyAgICAgICAgKFdURjo6QmFz
aWNSYXdTZW50aW5lbE5vZGU6Om5leHQpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTo6aXNPbkxpc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6
Ojo6U2VudGluZWxMaW5rZWRMaXN0KToKKyAgICAgICAgKFdURjo6OjpiZWdpbik6CisgICAgICAg
IChXVEY6Ojo6ZW5kKToKKyAgICAgICAgKFdURjo6OjpwdXNoKToKKwogMjAxMS0wOS0wMyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyB2YXJpYWJsZSBwcmVk
aWN0aW9ucyBvbmx5IHdvcmsgZm9yIGxvY2FsIHZhcmlhYmxlcywgbm90IHRlbXBvcmFyaWVzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NDQ5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
Niw2ICs2LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Fzc2VtYmxlciIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2J5dGVjb2RlIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvbXBpbGVyIgor
ICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGZnIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vaGVhcCIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2RlYnVnZ2VyIgogICAgICIke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW50ZXJwcmV0ZXIiCkBAIC01NCw3ICs1NSw3IEBAIFNFVChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3BwCiAgICAgZGVidWdn
ZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmNwcAotCisgICAgCiAgICAgaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAogICAgIGludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAogICAgIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDk0NDk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCw3IEBAIGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcg
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwIFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYg
KzEwMiw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGUFJJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR2VuZXJhdGlvbkluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
UFJJbmZvLmggXApAQCAtMTE2LDYgKzExOCw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRpb24uY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJC
YW5rLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZp
c2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUwLDYgKzE1NTAsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgorICAg
ICAgICAgICAgICAgIDxGaWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9ImRmZyIK
KyAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5cZGZn
XERGR0RyaXZlci5oIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgPC9GaWx0ZXI+CiAJCTxG
aWx0ZXIKIAkJCU5hbWU9InlhcnIiCiAJCQk+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9u
LnZzcHJvcHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzCShy
ZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwkod29ya2lu
ZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAKIAk+CiAJPFRvb2wKIAkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChDb25maWd1cmF0
aW9uQnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJpdmVkU291cmNlc1wmcXVvdDs7Li4v
Li4vOy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9ieXRlY29tcGlsZXIvOy4uLy4uL2pp
dC87Li4vLi4vcnVudGltZS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8u
Li93dGYvOy4uLy4uL3Byb2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4u
Ly4uL2hlYXAvOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVp
bGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9u
QnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rp
cilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OyIKKwkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmll
cz0iJnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9ialxKYXZhU2NyaXB0Q29yZVxEZXJp
dmVkU291cmNlc1wmcXVvdDs7Li4vLi4vOy4uLy4uL0FQSS87Li4vLi4vcGFyc2VyLzsuLi8uLi9i
eXRlY29tcGlsZXIvOy4uLy4uL2RmZy87Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi9i
eXRlY29kZS87Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0Zi87Li4vLi4vcHJvZmlsZXI7Li4v
Li4vYXNzZW1ibGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4vaGVhcC87JnF1b3Q7JChXZWJLaXRM
aWJyYXJpZXNEaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGlu
Y2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVk
ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZhU2NyaXB0
Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2YXRl
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7
IgogCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX19TVERfQyIKIAkJRm9yY2VkSW5jbHVkZUZp
bGVzPSJJQ1VWZXJzaW9uLmgiCiAJLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9jb3B5LWZpbGVzLmNtZAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMu
Y21kCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG1rZGlyICIlUHJpdmF0ZUhlYWRl
cnNEaXJlY3RvcnklIiAyPk5VTAogZm9yICUlZCBpbiAoCiAgICAgYXNzZW1ibGVyCiAgICAgYnl0
ZWNvZGUKKyAgICBkZmcKICAgICBoZWFwCiAgICAgZGVidWdnZXIKICAgICBpbnRlcnByZXRlcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0NDk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEwIEBACiAJCTBGQzgxNTBCMTQwNDNDMEUw
MENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsgfTsKIAkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8q
IFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUxNjE0
MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZU
YWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsKKwkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5jcHAgKi87
IH07CisJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAw
RkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CisJCTBGRDNDODI3MTQxMTVENEYwMEZEODFD
QiAvKiBERkdQcm9wYWdhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0aW9uLmgg
Ki87IH07CisJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUw
MEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBK
U0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIu
Y3BwICovOyB9OwpAQCAtMzc1LDcgKzM3OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4
MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY5QTA3MjcwRUQxQ0U2OTAwRjFGNjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2OUEwNzJC
MEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdpc3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0
ZXJJRC5oICovOyB9OwogCQk5NjlBMDcyQzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlB
MDcyOTBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0JCTk2OUEw
Nzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENv
ZGVCbG9jay5jcHAgKi87IH07CisJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5
QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdzID0ge0NP
TVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5QTA3OTcw
RUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9j
ay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEwNzk4MEVE
MUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENv
ZGVDYWNoZS5oICovOyB9OwogCQk5NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEw
NzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5LDYgKzc4
MywxMCBAQAogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBk
ZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Byb3BhZ2F0
aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wYWdhdGlvbi5oOyBwYXRo
ID0gZGZnL0RGR1Byb3BhZ2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8q
IEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNl
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEw
IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAv
KiBERkdQcm9wYWdhdGlvbi5oICovLAorCQkJCTBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBE
RkdQcm9wYWdhdGlvbi5jcHAgKi8sCisJCQkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovLAorCQkJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIu
Y3BwICovLAogCQkJCTg2RUNBNEYwMTMyRUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIu
aCAqLywKIAkJCQk4NkVDOURCNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwICovLAogCQkJCTg2RUM5REI1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNl
ci5oICovLApAQCAtMjYxNyw2ICsyNjI5LDggQEAKIAkJCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RD
MEQgLyogZml4ZWQtZHRvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQzUzMTQxM0ZBRjZFRjAw
QjdEQzBEIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQzUzMTUxM0ZBRjZFRjAw
QjdEQzBEIC8qIHV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQzQzgyNzE0MTE1RDRGMDBG
RDgxQ0IgLyogREZHUHJvcGFnYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI4MTQx
MTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVB
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNG
MTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNE
MjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKQEAgLTMwMzMsNiArMzA0Nyw4IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQz
QzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFy
cmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhF
QjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmgJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDYg
KzEwMDEsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0Mo
eDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1
bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3Qp
CisgICAgeworI2lmIENQVShYODZfNjQpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0
Lm1fcHRyKSwgWDg2UmVnaXN0ZXJzOjpyMTEpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3Mo
WDg2UmVnaXN0ZXJzOjpyMTEpKTsKKyNlbHNlCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0o
c3JjLm1fdmFsdWUsIGRlc3QubV9wdHIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJy
YW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBk
ZXN0KQogICAgIHsKICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAxLDkgKzE0MDEsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBTdGF0aXN0aWNz
KCkKICNlbmRpZgogfQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWdu
ZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3Ip
CitDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0
LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29k
ZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVh
cCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQorICAgICwgbV9leGVjdXRlQ291
bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBvcHRpbWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMK
ICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAs
IG1fbnVtUGFyYW1ldGVycygwKQpAQCAtMTQyMiw2ICsxNDIzLDcgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIp
CiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5bWJvbFRhYmxl
KHN5bVRhYikKKyAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCiB7CiAgICAgQVNTRVJU
KG1fc291cmNlKTsKIApAQCAtMTQ0MSwxNSArMTQ0MywxOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxv
Y2soKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwgaSArIDEp
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAl
ZDogIiwgcHJvZmlsZS0+Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwK
LSAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUgPSAldSwg
Y2VsbCA9ICV1LCBhcnJheSA9ICV1XG4iLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPm51bWJl
ck9mU2FtcGxlcygpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZJbnQz
MigpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZEb3VibGUoKSwKLSAg
ICAgICAgICAgICAgICBwcm9maWxlLT5wcm9iYWJpbGl0eU9mQ2VsbCgpLAotICAgICAgICAgICAg
ICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZBcnJheSgpKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVt
cChzdGRlcnIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQogI2VuZGlm
CisgICAgCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpZiB0aGVy
ZSBhcmUgaW5jb21pbmcgY2FsbHMuIEJ1dAorICAgIC8vIGlmIHRoaXMgaXMgY2FsbGVkIGR1cmlu
ZyBoZWFwIGRlc3RydWN0aW9uLCB0aGVuIHRoZXJlIG1heSBzdGlsbCBiZQorICAgIC8vIGluY29t
aW5nIGNhbGxzLCB3aGljaCBpcyBoYXJtbGVzcy4KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgb3Vy
IG91dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCisg
ICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24g
b2YgdGhlIH5DYWxsTGlua0luZm8KKyAgICAvLyBkZXN0cnVjdG9ycy4KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgZm9yIChzaXplX3Qgc2l6ZSA9IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwg
aSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC0xNTE5LDYgKzE1MjQsOCBAQCB2b2lkIENvZGVCbG9j
azo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiB7CiAgICAgYm9vbCBoYW5kbGVXZWFrUmVmZXJl
bmNlcyA9IGZhbHNlOwogICAgIAorICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1f
YWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZtX2dsb2JhbE9iamVjdCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fb3duZXJFeGVjdXRhYmxl
KTsKICAgICBpZiAobV9yYXJlRGF0YSkgewpAQCAtMTc4OSw4ICsxNzk2LDMwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmEKIH0KICAgICAKICNpZiBFTkFCTEUoSklU
KQordm9pZCBDYWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit7CisgICAgQVNTRVJUKGlzTGlua2VkKCkpOwor
ICAgIAorICAgIGlmIChpc0RGRykgeworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlz
Q2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisjZWxz
ZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbChjYWxsUmV0dXJu
TG9jYXRpb24pLCBpc0NhbGw/IGdsb2JhbERhdGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGlu
aygpIDogZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7Cisg
ICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKKyAgICBjYWxsZWUuY2xlYXIoKTsKKwor
ICAgIC8vIEl0IHdpbGwgYmUgb24gYSBsaXN0IGlmIHRoZSBjYWxsZWUgaGFzIGEgY29kZSBibG9j
ay4KKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgcmVtb3ZlKCk7Cit9CisKIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtDYWxscygpCiB7CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAg
ICAgbV9hbHRlcm5hdGl2ZS0+dW5saW5rQ2FsbHMoKTsKICAgICBpZiAoIShtX2NhbGxMaW5rSW5m
b3Muc2l6ZSgpIHx8IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5zaXplKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKCFtX2dsb2JhbERhdGEtPmNhblVzZUpJVCgpKQpAQCAtMTc5OSwyNCArMTgy
OCwxMDEgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY2FsbExpbmtJbmZvcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoIW1f
Y2FsbExpbmtJbmZvc1tpXS5pc0xpbmtlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChnZXRKSVRDb2RlKCkuaml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkgewotI2lm
IEVOQUJMRShERkdfSklUKQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxv
Y2F0aW9uQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwgbV9jYWxs
TGlua0luZm9zW2ldLmlzQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0Nv
bnN0cnVjdCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2Rl
TG9jYXRpb25OZWFyQ2FsbChtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uKSwg
bV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZp
cnR1YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0
cnVjdExpbmsoKSk7Ci0gICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmsoKTsKKyAgICAg
ICAgbV9jYWxsTGlua0luZm9zW2ldLnVubGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVy
KTsKICAgICB9CiB9CisKK3ZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKK3sK
KyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CisgICAgd2hpbGUgKG1faW5j
b21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9p
bmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluaygqbV9nbG9iYWxEYXRhLCByZXBhdGNoQnVmZmVy
KTsKK30KICNlbmRpZgogCiB2b2lkIENvZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUoKQogeworICAg
IGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPmNsZWFyRXZhbENh
Y2hlKCk7CiAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICByZXR1cm47CiAgICAgbV9yYXJl
RGF0YS0+bV9ldmFsQ29kZUNhY2hlLmNsZWFyKCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgdm9pZCByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKFZlY3RvcjxUPiYgdGFyZ2V0LCBW
ZWN0b3I8VD4mIHNvdXJjZSkKK3sKKyAgICBBU1NFUlQodGFyZ2V0LnNpemUoKSA8PSBzb3VyY2Uu
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldC5zaXplKCk7ICsraSkK
KyAgICAgICAgdGFyZ2V0W2ldID0gc291cmNlW2ldOworfQorCit2b2lkIENvZGVCbG9jazo6Y29w
eURhdGFGcm9tQWx0ZXJuYXRpdmUoKQoreworICAgIGlmICghbV9hbHRlcm5hdGl2ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMobV9jb25zdGFudFJl
Z2lzdGVycywgbV9hbHRlcm5hdGl2ZS0+bV9jb25zdGFudFJlZ2lzdGVycyk7CisgICAgcmVwbGFj
ZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0aW9uRGVjbHMsIG1fYWx0ZXJuYXRpdmUtPm1fZnVuY3Rp
b25EZWNscyk7CisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX2Z1bmN0aW9uRXhwcnMsIG1f
YWx0ZXJuYXRpdmUtPm1fZnVuY3Rpb25FeHBycyk7Cit9CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQg
T1NSLiBJZiBjb21waWxlT3B0aW1pemVkKCkgaXMgY2FsbGVkIGZyb20gc29tZXdoZXJlIG90aGVy
IHRoYW4gdGhlCisvLyBlcGlsb2d1ZSwgZG8gT1NSIGZyb20gdGhlIG9sZCBjb2RlIGJsb2NrIHRv
IHRoZSBuZXcgb25lLgorCisvLyBGSVhNRTogQWZ0ZXIgZG9pbmcgc3VjY2Vzc2Z1bCBvcHRpbWl6
ZWQgY29tcGlsYXRpb24sIHJlc2V0IHRoZSBwcm9maWxpbmcgY291bnRlciB0byAtMSwgc28KKy8v
IHRoYXQgdGhlIG5leHQgZXhlY3V0aW9uIG9mIHRoZSBvbGQgY29kZSBibG9jayB3aWxsIGp1bXAg
c3RyYWlnaHQgaW50byBjb21waWxlT3B0aW1pemVkKCkKKy8vIGFuZCBwZXJmb3JtIE9TUi4KKwor
Ly8gRklYTUU6IEVuc3VyZSB0aGF0IGEgY2FsbCB0byBjb21waWxlT3B0aW1pemVkKCkganVzdCBk
b2VzIE9TUiAoYW5kIHJlc2V0cyB0aGUgY291bnRlciB0byAtMSkKKy8vIGlmIHRoZSBjb2RlIGhh
ZCBhbHJlYWR5IGJlZW4gY29tcGlsZWQuCisKK0NvZGVCbG9jayogUHJvZ3JhbUNvZGVCbG9jazo6
cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7Cit9CisKK0NvZGVC
bG9jayogRXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGlj
X2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVj
b2RlKCk7Cit9CisKK0NvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkK
K3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhl
Y3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZv
ckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KKworSlNPYmplY3QqIFByb2dyYW1Db2RlQmxv
Y2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBK
SVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5
ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisg
ICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+
KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9k
ZSk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29t
cGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSkKK3sKKyAgICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
Om5leHRUaWVySklUKGdldEpJVFR5cGUoKSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28g
bWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAg
ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVj
dXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICBy
ZXR1cm4gZXJyb3I7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
K3sKKyAgICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRU
aWVySklUKGdldEpJVFR5cGUoKSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBz
dXJlIHdlIGRvbid0IGhpdCB0aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9w
dGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0
YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZUNoYWluTm9kZSwgbV9pc0Nv
bnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4g
ZXJyb3I7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1Nl
bnRpbmVsTGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJM
RShKSVQpCkBAIC05OCwxMiArOTksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogI2lm
IEVOQUJMRShKSVQpCi0gICAgc3RydWN0IENhbGxMaW5rSW5mbyB7CisgICAgc3RydWN0IENhbGxM
aW5rSW5mbzogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAg
ICAgICBDYWxsTGlua0luZm8oKQogICAgICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChm
YWxzZSkKICAgICAgICAgICAgICwgaXNDYWxsKGZhbHNlKQorICAgICAgICAgICAgLCBpc0RGRyhm
YWxzZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+Q2FsbExpbmtJ
bmZvKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgICAg
ICAgICAgcmVtb3ZlKCk7CisgICAgICAgIH0KIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBj
YWxsUmV0dXJuTG9jYXRpb247IC8vIGl0J3MgYSBuZWFyIGNhbGwgaW4gdGhlIG9sZCBKSVQsIG9y
IGEgbm9ybWFsIGNhbGwgaW4gREZHCiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBo
b3RQYXRoQmVnaW47CkBAIC0xMTEsMTMgKzExOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKICAgICAgICAgYm9vbCBoYXNT
ZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAgICAgICAgIGJvb2wgaXNDYWxsIDogMTsKKyAgICAgICAg
Ym9vbCBpc0RGRyA6IDE7CiAKICAgICAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxl
ZTsgfQotICAgICAgICB2b2lkIHVubGluaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGhhc1Nl
ZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBjYWxsZWUuY2xlYXIoKTsKLSAg
ICAgICAgfQorICAgICAgICB2b2lkIHVubGluayhKU0dsb2JhbERhdGEmLCBSZXBhdGNoQnVmZmVy
Jik7CiAKICAgICAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgICAgIHsKQEAgLTIxMCwxMyArMjE1
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENvZGVC
bG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9yKTsKKyAgICAg
ICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUs
IEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNv
dXJjZU9mZnNldCwgU3ltYm9sVGFibGUqLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8
Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFs
T2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgSGVhcCogbV9oZWFwOwogCiAgICAgcHVi
bGljOgogICAgICAgICB2aXJ0dWFsIH5Db2RlQmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIENv
ZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9Cisg
ICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVy
biBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQogCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJik7CkBAIC0yNzksNiArMjg3LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOworICAgICAgICAKKyAgICAgICAgYm9vbCBo
YXNJbmNvbWluZ0NhbGxzKCkgeyByZXR1cm4gbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9p
bmNvbWluZ0NhbGxzLmVuZCgpOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGxpbmtJbmNvbWlu
Z0NhbGwoQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV9p
bmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVS
UFJFVEVSKQpAQCAtMzAwLDggKzMxNywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1f
aXNDb25zdHJ1Y3RvciA/IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29u
c3RydWN0KCkgOiBvd25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsg
fQorICAgICAgICB2b2lkIHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgeworICAgICAgICAgICAg
bV9qaXRDb2RlID0gY29kZTsKKyAgICAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0g
Y29kZVdpdGhBcml0eUNoZWNrOworICAgICAgICB9CisgICAgICAgIEpJVENvZGUmIGdldEpJVENv
ZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRK
SVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRh
YmxlUG9vbCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0
YWJsZVBvb2woKTsgfQorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOworICAgICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CisjZWxzZQorICAgICAgICBKSVRDb2RlOjpKSVRUeXBl
IGdldEpJVFR5cGUoKSB7IHJldHVybiBKSVRDb2RlOjpCYXNlbGluZUpJVDsgfQogI2VuZGlmCiAK
ICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KQEAgLTM5OCw2ICs0MjUsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBXVEY6OmdlbmVyaWNCaW5h
cnlTZWFyY2g8VmFsdWVQcm9maWxlLCBpbnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0
PihtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0
KTsKICAgICAgICAgfQorICAgICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckFyZ3Vt
ZW50KGludCBhcmd1bWVudEluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgaW5kZXgg
PSBhcmd1bWVudEluZGV4IC0gMTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5kZXgpID49IG1fdmFsdWVQcm9maWxlcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IHZhbHVlUHJvZmlsZShh
cmd1bWVudEluZGV4IC0gMSk7CisgICAgICAgICAgICBpZiAocmVzdWx0LT5ieXRlY29kZU9mZnNl
dCAhPSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIHVuc2lnbmVkIGdsb2JhbFJlc29s
dmVJbmZvQ291bnQoKSBjb25zdApAQCAtNTM1LDYgKzU3MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgRXZhbENvZGVDYWNoZSYgZXZhbENvZGVDYWNoZSgpIHsgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlOyB9CiAKICAg
ICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBjb3B5RGF0
YUZyb21BbHRlcm5hdGl2ZSgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJ
bnZvY2F0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNv
b24oKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKIAogICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGVz
ZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgogCkBAIC01OTQsNiArNjQ1LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNv
bHZlSW5mb3M7CiAgICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsK
ICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9z
OworICAgICAgICBKSVRDb2RlIG1faml0Q29kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOworICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8
Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+ID4gbV9pbmNv
bWluZ0NhbGxzOwogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC02MTAs
NiArNjY0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3lt
Ym9sVGFibGU7CiAKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsgLy8g
RklYTUUgbWFrZSB0aGlzIGRvIHNvbWV0aGluZworCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7
CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6CkBA
IC02NDYsOSArNzAyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gcmVzcG9uc2libGUgZm9y
IG1hcmtpbmcgaXQuCiAKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJs
b2NrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwg
dW5zaWduZWQgc291cmNlT2Zmc2V0KQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVj
dXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zm
c2V0LCAmbV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSkKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IENvZGVCbG9j
ayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVy
LCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlLCBhbHRlcm5hdGl2
ZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTY1OCwxNiArNzE0LDIyIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2Rl
QmxvY2sgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVU
eXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVU
eXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3Zp
ZGVyPiBzb3VyY2VQcm92aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQor
ICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwg
Z2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsK
ICAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsK
KyNlbmRpZgogICAgIH07CiAKICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2Jh
bENvZGVCbG9jayB7CiAgICAgcHVibGljOgotICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVw
dGgpCi0gICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxD
b2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgICAgICBFdmFsQ29kZUJs
b2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQg
YmFzZVNjb3BlRGVwdGgsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAg
ICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2Jh
bE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQogICAgICAgICAgICAgLCBt
X2Jhc2VTY29wZURlcHRoKGJhc2VTY29wZURlcHRoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAg
LTY4MSw2ICs3NDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQobV92
YXJpYWJsZXMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIG1fdmFyaWFibGVzLnN3YXAodmFyaWFi
bGVzKTsKICAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1l
bnQoKTsKKyNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1fYmFzZVNjb3BlRGVw
dGg7CkBAIC02OTMsMTQgKzc2MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYXMg
d2UgbmVlZCB0byBpbml0aWFsaXNlIHRoZSBDb2RlQmxvY2sgYmVmb3JlIHdlIGNvdWxkIGluaXRp
YWxpc2UgYW55IFJlZlB0ciB0byBob2xkIHRoZSBzaGFyZWQKICAgICAgICAgLy8gc3ltYm9sIHRh
YmxlLCBzbyB3ZSBqdXN0IHBhc3MgYXMgYSByYXcgcG9pbnRlciB3aXRoIGEgcmVmIGNvdW50IG9m
IDEuICBXZSB0aGVuIG1hbnVhbGx5IGRlcmVmCiAgICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9y
LgotICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93
bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNv
dXJjZU9mZnNldCwgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25z
dHJ1Y3RvcikKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWdu
ZWQgc291cmNlT2Zmc2V0LCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2Nr
PiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwg
Y29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgU2hh
cmVkU3ltYm9sVGFibGU6OmNyZWF0ZSgpLmxlYWtSZWYoKSwgaXNDb25zdHJ1Y3RvciwgYWx0ZXJu
YXRpdmUpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB+RnVuY3Rpb25Db2RlQmxvY2so
KQogICAgICAgICB7CiAgICAgICAgICAgICBzaGFyZWRTeW1ib2xUYWJsZSgpLT5kZXJlZigpOwog
ICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwor
I2VuZGlmCiAgICAgfTsKIAogICAgIGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBp
bmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBjb3Vu
dHMgKiBjZXJ0YWludHkgLyBudW1iZXJPZlNhbXBsZXM7CiAgICAgfQotICAgICAgICAKKyAgICAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkludDMycygpIGNvbnN0CiAgICAgewogICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSAwOwpAQCAtMTQyLDYgKzE0Miw4NiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxl
IHsKICAgICB7CiAgICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJh
eXMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkpOwogICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICB2
b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsCisgICAgICAg
ICAgICAgICAgInNhbXBsZXMgPSAldSwgaW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAl
dSwgYXJyYXkgPSAldSIsCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCisgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZJbnQzMnMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkRv
dWJsZXMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkNlbGxzKCksCisgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZBcnJheXMoKSk7CisgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghIWJ1Y2tldHNbaV0gfHwgISF3ZWFrQnVja2V0c1tpXSkgeworICAgICAgICAg
ICAgICAgIGlmIChmaXJzdCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIjog
Iik7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSkKKyAgICAg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVzIiwgSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0p
LmRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoISF3ZWFrQnVj
a2V0c1tpXSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkRlYWRDZWxsIik7CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CisgICAg
ICAgIHVuc2lnbmVkIHNhbXBsZXM7CisgICAgICAgIHVuc2lnbmVkIGludDMyczsKKyAgICAgICAg
dW5zaWduZWQgZG91YmxlczsKKyAgICAgICAgdW5zaWduZWQgY2VsbHM7CisgICAgICAgIHVuc2ln
bmVkIGFycmF5czsKKyAgICB9OworCisgICAgLy8gT3B0aW1pemVkIG1ldGhvZCBmb3IgZ2V0dGlu
ZyBhbGwgY291bnRzIGF0IG9uY2UuCisgICAgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBzYW1wbGVzID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50MzJzICA9
IDA7CisgICAgICAgIHVuc2lnbmVkIGRvdWJsZXMgPSAwOworICAgICAgICB1bnNpZ25lZCBjZWxs
cyAgID0gMDsKKyAgICAgICAgdW5zaWduZWQgYXJyYXlzICA9IDA7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghYnVja2V0c1tpXSkgeworICAgICAgICAgICAgICAgIFdlYWtCdWNrZXQgd2Vh
a0J1Y2tldCA9IHdlYWtCdWNrZXRzW2ldOworICAgICAgICAgICAgICAgIGlmICghIXdlYWtCdWNr
ZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxlcysrOworICAgICAgICAgICAgICAgICAg
ICBjZWxscysrOworICAgICAgICAgICAgICAgICAgICBpZiAod2Vha0J1Y2tldC5nZXRDbGFzc0lu
Zm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlz
Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzYW1w
bGVzKys7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoYnVja2V0c1tpXSk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQor
ICAgICAgICAgICAgICAgIGludDMycysrOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNE
b3VibGUoKSkKKyAgICAgICAgICAgICAgICBkb3VibGVzKys7CisgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIGNlbGxzKys7CisgICAgICAgICAg
ICAgICAgaWYgKGlzSlNBcnJheSgmZ2xvYmFsRGF0YSwgdmFsdWUuYXNDZWxsKCkpKQorICAgICAg
ICAgICAgICAgICAgICBhcnJheXMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzID0gc2FtcGxlczsKKyAgICAgICAgc3RhdGlz
dGljcy5pbnQzMnMgID0gaW50MzJzOworICAgICAgICBzdGF0aXN0aWNzLmRvdWJsZXMgPSBkb3Vi
bGVzOworICAgICAgICBzdGF0aXN0aWNzLmNlbGxzICAgPSBjZWxsczsKKyAgICAgICAgc3RhdGlz
dGljcy5hcnJheXMgID0gYXJyYXlzOworICAgIH0KICAgICAKICAgICBpbnQgYnl0ZWNvZGVPZmZz
ZXQ7IC8vIC0xIGZvciBwcm9sb2d1ZQogICAgIEVuY29kZWRKU1ZhbHVlIGJ1Y2tldHNbbnVtYmVy
T2ZCdWNrZXRzXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHJlc2VydmVMYXN0VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMu
bGFzdCgpOwogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUqIHByb2dyYW1Ob2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBQcm9ncmFt
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQpCiAg
ICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVi
dWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9i
YWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291
cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8o
KSkKQEAgLTIyOCw2ICsyMjgsOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoUHJvCiAgICAgCiAgICAgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9IDE7IC8vIEFs
bG9jYXRlIHNwYWNlIGZvciAidGhpcyIKICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJz
ID0gY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgCisgICAgaWYgKGNvbXBpbGF0aW9uS2luZCA9
PSBPcHRpbWl6aW5nQ29tcGlsYXRpb24pCisgICAgICAgIHJldHVybjsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CkBAIC0yNTgs
NyArMjYxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAg
IH0KIH0KIAotQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9k
eU5vZGUqIGZ1bmN0aW9uQm9keSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0RGVidWdI
b29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBtX3Nob3Vs
ZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1Byb2Zp
bGluZygpKQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFpbi0+Z2xv
YmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkBAIC00MTksNyArNDIyLDcgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgIH0KIH0KIAotQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgRXZhbENv
ZGVCbG9jayogY29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KEV2YWxOb2RlKiBldmFsTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSwgRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktp
bmQpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVj
dC0+ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWlu
LT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRS
aWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJj
ZUluZm8oKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC05Miw5ICs5MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5l
cmF0ZWRDb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2RlKCk7CiAK
LSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWluTm9kZSos
IFN5bWJvbFRhYmxlKiwgUHJvZ3JhbUNvZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENv
ZGVCbG9jayopOwotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKik7CisgICAgICAgIGVudW0gQ29t
cGlsYXRpb25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0aW1pemluZ0NvbXBpbGF0aW9uIH07
CisgICAgICAgIAorICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNjb3Bl
Q2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25L
aW5kKTsKKyAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIFNjb3Bl
Q2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOwor
ICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3lt
Ym9sVGFibGUqLCBFdmFsQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKIAogICAgICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0K
ICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7
IHJldHVybiAqbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ0
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNvbXBpbGUgdGhlIGRhdGFmbG93IGdy
YXBoIGZyb20gYSBDb2RlQmxvY2suCiBjbGFzcyBCeXRlQ29kZVBhcnNlciB7CiBwdWJsaWM6Ci0g
ICAgQnl0ZUNvZGVQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgR3JhcGgmIGdyYXBoKQorICAgIEJ5dGVDb2RlUGFyc2VyKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgR3JhcGgmIGdyYXBoKQogICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAg
ICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2so
cHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3Vy
cmVudEluZGV4KDApCiAgICAgICAgICwgbV9wYXJzZUZhaWxlZChmYWxzZSkKQEAgLTY1LDYgKzY2
LDkgQEAgcHVibGljOgogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBt
X251bVBhc3NlZFZhckFyZ3MoMCkKICAgICB7CisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFU
SU9OKQorICAgICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKKyNlbmRpZgogICAgIH0KIAog
ICAgIC8vIFBhcnNlIGEgZnVsbCBDb2RlQmxvY2sgb2YgYnl0ZWNvZGUuCkBAIC00MjEsOCArNDI1
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7
CiAgICAgICAgIE5vZGVJbmRleCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBP
cEluZm8oMCksIE9wSW5mbyhQcmVkaWN0Tm9uZSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogcHV0
SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwp
OwotICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51
Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQorICAgICAgICBpZiAoaW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVz
dWx0KSB7CiAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxs
KTsKKyAgICAgICAgICAgIGR5bmFtaWNhbGx5UHJlZGljdChjYWxsLCBtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3BfY2FsbCkpOworICAgICAgICB9CiAgICAgICAgIGlmIChSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFt
ZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OwogICAgICAgICByZXR1cm4gY2FsbDsKQEAg
LTQ2Miw5ICs0NjgsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGls
ZSAoIW1fcmV1c2FibGVOb2RlU3RhY2suaXNFbXB0eSgpKTsKICAgICB9CisgICAgCisgICAgdm9p
ZCBkeW5hbWljYWxseVByZWRpY3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKKyAgICB7CisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAg
ICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBtX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQocHJvZmlsZSk7
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIHByZWRpY3Rp
b24gWyV1LCAldV06ICIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHByb2Zp
bGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAg
IG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0KG1ha2VQcmVkaWN0aW9uKCptX2dsb2JhbERhdGEs
ICpwcm9maWxlKSwgRHluYW1pY1ByZWRpY3Rpb24pOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKG5vZGVJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyNl
bmRpZgorICAgIH0KKyAgICAKKyAgICB2b2lkIGR5bmFtaWNhbGx5UHJlZGljdChOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgZHluYW1pY2FsbHlQcmVkaWN0KG5vZGVJbmRleCwg
bV9jdXJyZW50SW5kZXgpOworICAgIH0KIAogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVk
QmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKICAgICAvLyBUaGUgY3VycmVudCBibG9jayBi
ZWluZyBnZW5lcmF0ZWQuCkBAIC01NjMsNyArNTkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8o
bV9jdXJyZW50SW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsKICAg
ICAgICAgfQotCisgICAgICAgIAogICAgICAgICAvLyBTd2l0Y2ggb24gdGhlIGN1cnJlbnQgYnl0
ZWNvZGUgb3Bjb2RlLgogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
aW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2N1cnJlbnRJbmRleDsKICAgICAgICAgc3dpdGNoIChpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKQEAg
LTg4Myw2ICs5MTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWws
IE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMu
bG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsKICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CisgICAgICAgICAgICBkeW5hbWlj
YWxseVByZWRpY3QoZ2V0QnlWYWwpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRCeVZh
bChnZXRCeVZhbCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwpA
QCAtOTEyLDYgKzk0Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRv
R3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSks
IGJhc2UpOwogICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0
TWV0aG9kKTsKKyAgICAgICAgICAgIGR5bmFtaWNhbGx5UHJlZGljdChnZXRNZXRob2QpOwogICAg
ICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChvcF9tZXRob2Rf
Y2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwpAQCAtOTI1LDYgKzk1Niw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAgICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7CisgICAgICAgICAg
ICBkeW5hbWljYWxseVByZWRpY3QoZ2V0QnlJZCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29y
ZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV9p
ZCk7CkBAIC0xMzUwLDcgKzEzODIsNyBAQCBib29sIHBhcnNlKEdyYXBoJiBncmFwaCwgSlNHbG9i
YWxEYXRhKiBnCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAgICAgcmV0dXJuIGZhbHNl
OwogI2Vsc2UKLSAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LCBncmFwaCkucGFyc2UoKTsKKyAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIGdyYXBoKS5wYXJzZSgpOwogI2Vu
ZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0RyaXZl
ci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNl
ci5oIgorI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRp
b24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIENvbXBpbGVN
b2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKK2lubGluZSBib29sIGNvbXBp
bGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBj
YWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgR3JhcGggZGZn
KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAg
aWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQorICAg
ICAgICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMsIGNvZGVCbG9jayk7
CisgICAgCisgICAgcHJvcGFnYXRlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAK
KyAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7
CisgICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikgeworICAgICAgICBBU1NF
UlQoaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklU
LmNvbXBpbGVGdW5jdGlvbihqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoY29tcGlsZU1vZGUgPT0gQ29tcGlsZU90aGVyKTsKKyAg
ICAgICAgQVNTRVJUKCFqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAg
ZGF0YUZsb3dKSVQuY29tcGlsZShqaXRDb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRDb2RlJiBqaXRDb2RlKQoreworICAgIHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwg
ZXhlYywgMCwgY29kZUJsb2NrLCBqaXRDb2RlLCAwKTsKK30KKworYm9vbCB0cnlDb21waWxlRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spCit7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0
aW9uLCBleGVjLCBjYWxsZWVBcmdzRXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdp
dGhBcml0eUNoZWNrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEcml2ZXJfaAorI2RlZmluZSBERkdE
cml2ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVRDb2RlOworY2xh
c3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOworCituYW1lc3BhY2UgREZHIHsKKworI2lmIEVOQUJM
RShERkdfSklUKQorYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENv
ZGUmKTsKK2Jvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSogY2Fs
bGVlQXJnc0V4ZWMsIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisjZWxzZQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZShF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGlu
ZSBib29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0K
KyNlbmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTQ0OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDYgKzEyMSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
CiAgICAgfQogICAgIGlmIChvcCA9PSBKU0NvbnN0YW50KSB7CiAgICAgICAgIHByaW50ZigiJXMk
JXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmNvbnN0YW50TnVtYmVyKCkpOworICAg
ICAgICBpZiAoY29kZUJsb2NrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52
YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spOworICAgICAgICAgICAgcHJpbnRmKCIgPSAlcyIs
IHZhbHVlLmRlc2NyaXB0aW9uKCkpOworICAgICAgICB9CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOwogICAgIH0KICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7
CkBAIC0xODYsMTcgKzE5MCw0NyBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXgg
b3ApCiAgICAgfQogfQogCi12b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3Rh
dGUqIGV4ZWMpCit2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4
ZWMsIENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50
cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1l
bnRQcmVkaWN0aW9ucy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwg
bnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1
ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZyAtIDEpOwotICAgICAgICBpZiAoYXJndW1lbnRWYWx1ZS5p
c0ludDMyKCkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVl
IHw9IFByZWRpY3RJbnQzMjsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJs
ZSgpKQotICAgICAgICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQ
cmVkaWN0RG91YmxlOworICAgIGlmIChleGVjKSB7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFy
Z3VtZW50cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1f
YXJndW1lbnRQcmVkaWN0aW9ucy5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXpl
X3QgYXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7CisgICAgICAgICAg
ICBKU1ZhbHVlIGFyZ3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKKyAgICAg
ICAgICAgIGlmIChhcmd1bWVudFZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGFyZ3VtZW50VmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAg
IEFTU0VSVChjb2RlQmxvY2spOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKTsK
KworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
OworICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA+PSAxKTsKKyAgICBmb3Ig
KHNpemVfdCBhcmcgPSAxOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9u
dW1QYXJhbWV0ZXJzKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0g
cHJvZmlsZWRDb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAg
IGlmICghcHJvZmlsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdf
REVCVUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIkFyZ3VtZW50IHByb2ZpbGUgWyVsdV06ICIs
IGFyZyk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJc
biIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVu
dFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnBy
b2ZpbGUpKTsKKyAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRm
KCIgICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2FyZ3VtZW50UHJl
ZGljdGlvbnNbYXJnXS5tX3ZhbHVlKSk7CisjZW5kaWYKICAgICB9CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShjb2RlQmxvY2spOworI2VuZGlmCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0NDk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPFJl
Z2lzdGVyRmlsZS5oPgotI2luY2x1ZGUgPGRmZy9ERkdOb2RlLmg+CisjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTEzNSwxMiArMTM2LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuICptX2Jsb2Nrc1tibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVCZWdpbildOwogICAgIH0KIAotICAgIHZvaWQgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHBy
ZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNv
dXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFu
ZCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1l
bnRQcmVkaWN0aW9ucy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7
Ci0gICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3Vt
ZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1
bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0
aW9uLCBzb3VyY2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCh1bnNpZ25l
ZClvcGVyYW5kID49IG1fdmFyaWFibGVQcmVkaWN0aW9ucy5zaXplKCkpIHsKQEAgLTE0OCwzNyAr
MTQ4LDM3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fdmFyaWFibGVQcmVkaWN0aW9ucy5yZXNp
emUob3BlcmFuZCArIDEpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtZXJnZVByZWRp
Y3Rpb24obV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9u
KG1fdmFyaWFibGVQcmVkaWN0aW9uc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihw
cmVkaWN0aW9uLCBzb3VyY2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0R2xvYmFs
VmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0
aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFy
TnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNl
KQogICAgIHsKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVy
YXRvciBpdGVyID0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5maW5kKHZhck51bWJlciArIDEpOwog
ICAgICAgICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmVuZCgpKSB7CiAgICAg
ICAgICAgICBQcmVkaWN0aW9uU2xvdCBwcmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIG1lcmdl
UHJlZGljdGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0
aW9uLCBzb3VyY2UpKTsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9u
KHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJj
ZSkpOwogICAgICAgICAgICAgbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5hZGQodmFyTnVtYmVyICsg
MSwgcHJlZGljdGlvblNsb3QpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUs
IG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJu
IG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJl
ZGljdGlvbiwgc291cmNlKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBu
b2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQor
ICAgIGJvb2wgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFBy
ZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7
CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICBwcmVkaWN0KG5vZGUubG9jYWwo
KSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUu
bG9jYWwoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52
YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGlj
dGlvbiwgc291cmNlKTsKICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1l
dGhvZDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAg
ICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBz
b3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3Vy
Y2UpOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIyNiwxMiArMjI2LDQzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKICAgICAgICAgfQogICAgIH0K
KyAgICAKKyAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRz
LgorICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlz
SlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0
KG5vZGVJbmRleCkuaXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSW50MzJDb25zdGFu
dChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhdChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2spOworICAg
IH0KKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJ
bmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0Rv
dWJsZUNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIC8vIEhlbHBlciBtZXRob2RzIGdl
dCBjb25zdGFudCB2YWx1ZXMgZnJvbSBub2Rlcy4KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0
YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsK
KyAgICB9CisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2Rl
SW5kZXgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGRvdWJs
ZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mRG91
YmxlQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJl
ZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRU
eXBlcyhFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2lj
QmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJn
Q2hpbGRyZW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEzLDYgKzkxMyw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxs
ID0gbV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAg
ICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5o
b3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0
VG9DaGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwNywzOSArMjA3LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9k
cyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdyYXBoKClbbm9kZUluZGV4
XS5pc0NvbnN0YW50KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29u
c3RhbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgYm9vbCBp
c0RvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1
cm4gaXNKU0NvbnN0YW50KG5vZGVJbmRleCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KS5pc051bWJlcigpOwotICAgIH0KKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29s
IGlzSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlND
b25zdGFudChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCks
IG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2Rl
SW5kZXgpOyB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9t
IG5vZGVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBncmFwaCgpW25vZGVJbmRleF0uY29uc3RhbnRO
dW1iZXIoKTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleCkuZ2V0KCk7Ci0gICAgfQot
ICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKLSAgICB9Ci0g
ICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigp
OwotICAgIH0KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJ
bmRleCk7IH0KKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCks
IG5vZGVJbmRleCk7IH0KKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRl
eCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVC
bG9jaygpLCBub2RlSW5kZXgpOyB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0
ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBERkdf
SklUX0FTU0VSVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDk0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDYgKzU0LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZhbHVlUHJv
ZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewpAQCAtMTk1LDYgKzE5OCw3IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBl
IFByZWRpY3RBcnJheSAKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAg
PSAweDA0Owogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7
CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRp
YyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RUb3AgICAgPSAweDBmOwogc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgRHluYW1pY1ByZWRpY3Rpb25UYWcgPSAweDgwOwogc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwOwogCkBAIC0yMDIsNyAr
MjA2LDcgQEAgZW51bSBQcmVkaWN0aW9uU291cmNlIHsgU3RhdGljUHJlZGljdGlvbgogCiBpbmxp
bmUgYm9vbCBpc0NlbGxQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgflBy
ZWRpY3RBcnJheSk7CisgICAgcmV0dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQcmVkaWN0
Q2VsbCAmJiAhKHZhbHVlICYgfihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwog
fQogCiBpbmxpbmUgYm9vbCBpc0FycmF5UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpA
QCAtMjIyLDcgKzIyNiw3IEBAIGlubGluZSBib29sIGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0
ZWQKIAogaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH5Q
cmVkaWN0TnVtYmVyKTsKKyAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAh
KHZhbHVlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdGlvblRhZ01hc2spKTsKIH0KIAogaW5s
aW5lIGJvb2wgaXNEeW5hbWljUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtMjMx
LDYgKzIzNSw0MiBAQCBpbmxpbmUgYm9vbCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlCiAg
ICAgcmV0dXJuICEhKHZhbHVlICYgRHluYW1pY1ByZWRpY3Rpb25UYWcpOwogfQogCisjaWZuZGVm
IE5ERUJVRworaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRU
eXBlIHZhbHVlKQoreworICAgIGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKHZhbHVlKSkgeworICAg
ICAgICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7CisgICAgICAgIGNhc2Ug
UHJlZGljdE5vbmU6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWJvdHRvbSI7CisgICAgICAg
IGNhc2UgUHJlZGljdENlbGw6CisgICAgICAgICAgICByZXR1cm4gInAtZHluLWNlbGwiOworICAg
ICAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgICAgIHJldHVybiAicC1keW4tYXJyYXki
OworICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiAicC1keW4t
aW50MzIiOworICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6CisgICAgICAgICAgICByZXR1cm4g
InAtZHluLW51bWJlciI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAt
ZHluLXRvcCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNh
c2UgUHJlZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC1zdGF0LWJvdHRvbSI7CisgICAgY2Fz
ZSBQcmVkaWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtY2VsbCI7CisgICAgY2FzZSBQ
cmVkaWN0QXJyYXk6CisgICAgICAgIHJldHVybiAicC1zdGF0LWFycmF5IjsKKyAgICBjYXNlIFBy
ZWRpY3RJbnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtaW50MzIiOworICAgIGNhc2UgUHJl
ZGljdE51bWJlcjoKKyAgICAgICAgcmV0dXJuICJwLXN0YXQtbnVtYmVyIjsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gInAtc3RhdC10b3AiOworICAgIH0KK30KKyNlbmRpZgorCiBpbmxp
bmUgUHJlZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJl
ZGljdGVkVHlwZSByaWdodCkKIHsKICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSA9
PSBpc0R5bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSkKQEAgLTI0NSw5ICsyODUsMTIgQEAgaW5saW5l
IFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotaW5saW5lIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5cGUg
cmlnaHQpCitpbmxpbmUgYm9vbCBtZXJnZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlw
ZSByaWdodCkKIHsKLSAgICBsZWZ0ID0gc3RhdGljX2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhz
dGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KSwgcmlnaHQpKTsKKyAgICBQcmVkaWN0ZWRU
eXBlIG5ld1ByZWRpY3Rpb24gPSBzdGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRp
Y19jYXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpLCByaWdodCkpOworICAgIGJvb2wgcmVzdWx0ID0g
bmV3UHJlZGljdGlvbiAhPSBzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KTsKKyAgICBs
ZWZ0ID0gbmV3UHJlZGljdGlvbjsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHR5cGUsIFByZWRpY3Rpb25T
b3VyY2Ugc291cmNlKQpAQCAtMjU5LDIzICszMDIsMzEgQEAgaW5saW5lIFByZWRpY3RlZFR5cGUg
bWFrZVByZWRpY3Rpb24oUHJlZAogICAgIHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBEeW5hbWlj
UHJlZGljdGlvbiA/IER5bmFtaWNQcmVkaWN0aW9uVGFnIDogMCk7CiB9CiAKLSNpZm5kZWYgTkRF
QlVHCi1pbmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUg
dmFsdWUpCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQoraW5saW5lIFByZWRpY3RlZFR5cGUg
bWFrZVByZWRpY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWYWx1ZVByb2Zp
bGUmIHByb2ZpbGUpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5v
bmU6Ci0gICAgICAgIHJldHVybiAicC1ib3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0g
ICAgICAgIHJldHVybiAicC1jZWxsIjsKLSAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAg
cmV0dXJuICJwLWFycmF5IjsKLSAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0dXJu
ICJwLWludDMyIjsKLSAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC1u
dW1iZXIiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC10b3AiOwotICAgIH0KKyAg
ICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3RhdGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1
dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRpc3RpY3MpOworICAgIAorICAgIGlmICghc3Rh
dGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAg
aWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0
dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChz
dGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4g
RHluYW1pY1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0RG91YmxlOworICAgIAorICAgIGlmIChzdGF0
aXN0aWNzLmludDMycyArIHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMp
CisgICAgICAgIHJldHVybiBEeW5hbWljUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7Cisg
ICAgCisgICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAg
ICAgICAgcmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAor
ICAgIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAg
cmV0dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdENlbGw7CisgICAgCisgICAgcmV0
dXJuIER5bmFtaWNQcmVkaWN0aW9uVGFnIHwgUHJlZGljdFRvcDsKIH0KICNlbmRpZgogCkBAIC0z
NTYsNiArNDA3LDMzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQo
KSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2
YWx1ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggKyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0lu
dDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
aXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNJbnQzMigpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0
YW50KGNvZGVCbG9jaykuaXNOdW1iZXIoKTsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCB2YWx1
ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9m
SlNDb25zdGFudChjb2RlQmxvY2spLmFzSW50MzIoKTsKKyAgICB9CisKKyAgICBkb3VibGUgdmFs
dWVPZkRvdWJsZUNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIH0KIAog
ICAgIGJvb2wgaGFzTG9jYWwoKQogICAgIHsKQEAgLTQ3MCw3ICs1NDgsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihtX29wSW5mbzIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
LCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlw
ZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChoYXNQcmVkaWN0aW9uKCkpOwogICAgICAgICAKQEAgLTQ3OCwxNiArNTU2LDE5IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgLy8gdG8gaGVhcCBsb2FkcyBhcyB3ZWxsIGFzIGNhbGxzIGlz
IG5vdCBwcm9maXRhYmxlLCBhcyB0aGVzZSBwcmVkaWN0aW9ucwogICAgICAgICAvLyBhcmUgd3Jv
bmcgdG9vIG9mdGVuLiBIZW5jZSwgdGhpcyBjb21wbGV0ZWx5IGlnbm9yZXMgc3RhdGljIHByZWRp
Y3Rpb25zLgogICAgICAgICBpZiAoc291cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAg
ICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChzb3VyY2Ug
PT0gRHluYW1pY1ByZWRpY3Rpb24pOwogICAgICAgICAKLSAgICAgICAgbV9vcEluZm8yIHw9IER5
bmFtaWNQcmVkaWN0aW9uVGFnIHwgcHJlZGljdGlvbjsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBu
ZXdQcmVkaWN0aW9uID0gRHluYW1pY1ByZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOworICAgICAg
ICBib29sIHJlc3VsdCA9IG1fb3BJbmZvMiAhPSBuZXdQcmVkaWN0aW9uOworICAgICAgICBtX29w
SW5mbzIgfD0gbmV3UHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0K
KyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRpb24uaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKSAmJiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByb3Bh
Z2F0b3IgeworcHVibGljOgorICAgIFByb3BhZ2F0b3IoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2spCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2dsb2JhbERhdGEo
Z2xvYmFsRGF0YSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwg
bV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgeworICAgICAgICBtX3ByZWRpY3Rp
b25zLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAw
OyBpIDwgbV9ncmFwaC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0g
PSBQcmVkaWN0Tm9uZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhwb2ludCgpCisgICAgewor
I2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRp
bWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZT
LXNvcnRlZCBjb2RlLgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICBwcm9wYWdhdGVGb3J3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQg
cHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2Rl
IHdpbGwKKyAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBu
ZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMg
cGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZp
eHBvaW50CisgICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hv
cnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9j
aGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBEbyBhbm90aGVyIGZvcndhcmQgcGFzcyBiZWNhdXNlIGZvcndhcmQgcGFzc2VzIGFyZSBv
biBhdmVyYWdlIG1vcmUKKyAgICAgICAgICAgIC8vIHByb2ZpdGFibGUuCisgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQg
c2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBp
ZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gPT0gcHJlZGljdGlvbikKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5k
ZXhdID0gcHJlZGljdGlvbjsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAg
IHsKKyAgICAgICAgaWYgKERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21w
aWxlSW5kZXhdLCBwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CisgICAgICAgIHN3aXRjaCAo
b3ApIHsKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbm9kZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdEludDMyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAg
ZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXko
Jm1fZ2xvYmFsRGF0YSwgY2VsbCkpCisgICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdEFycmF5LCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJl
ZGljdGlvbihQcmVkaWN0Q2VsbCwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dFRvcCwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwo
KSk7CisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsK
KyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBt
X3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBEeW5hbWlj
UHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNl
IEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0
OgorICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7Cisg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgRHlu
YW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7CisgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24gPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkg
eworICAgICAgICAgICAgICAgIGlmIChpc051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCisg
ICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJl
ZGljdGlvbihQcmVkaWN0TnVtYmVyLCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFZhbHVlQWRkOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRp
Y3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9
IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpc0R5bmFtaWNQcmVkaWN0aW9uKGxlZnQpICYmIGlzRHluYW1pY1ByZWRpY3Rpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBp
c051bWJlclByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0lu
dDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMy
LCBEeW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERv
dWJsZSwgRHluYW1pY1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3As
IER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAg
IGNhc2UgQXJpdGhTdWI6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkg
JiYgaXNEeW5hbWljUHJlZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJ
bnQzMlByZWRpY3Rpb24obWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAg
ICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBE
eW5hbWljUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIER5bmFt
aWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAg
IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgRHluYW1pY1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAg
ICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAg
ICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAg
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgc2FkLCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVk
aWN0aW9uLCBldmVuIHRob3VnaCB3ZSBlYXNpbHkKKyAgICAgICAgICAgIC8vIGNvdWxkLgorICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBEeW5hbWlj
UHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAg
ICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3Ry
dWN0OiB7CisgICAgICAgICAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihub2RlLmdldFByZWRp
Y3Rpb24oKSkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rp
b24oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdENlbGwsIER5bmFtaWNQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEds
b2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAoaXNE
eW5hbWljUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBtX2NoYW5n
ZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIG1fcHJlZGlj
dGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIER5bmFtaWNQcmVkaWN0
aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24n
dCByZXR1cm4gYW55dGhpbmcuCisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBERkc6Okp1bXA6CisgICAgICAgIGNhc2UgQnJh
bmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAg
ICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIGZv
ciB0aGVtLCB5ZXQuCisgICAgICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAgY2FzZSBSZXNvbHZl
QmFzZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgdm9pZCBwcm9wYWdhdGVGb3J3YXJkKCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7
CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4
IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBwcm9wYWdh
dGVOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBw
cm9wYWdhdGVCYWNrd2FyZCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAg
IHByaW50ZigiUHJvcGFnYXRpbmcgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRp
ZgorICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGls
ZUluZGV4LS0gPiAwOykKKyAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGUobV9ncmFwaFttX2NvbXBp
bGVJbmRleF0pOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBKU0dsb2Jh
bERhdGEmIG1fZ2xvYmFsRGF0YTsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIENv
ZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIAorICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJ
bmRleDsKKyAgICAKKyAgICBWZWN0b3I8UHJlZGljdGVkVHlwZSwgMTY+IG1fcHJlZGljdGlvbnM7
CisKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgIHVuc2lnbmVkIG1fY291bnQ7CisjZW5kaWYK
KyAgICAKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiBn
cmFwaCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgQVNTRVJUKHByb2ZpbGVkQmxvY2spOworICAg
IAorICAgIFByb3BhZ2F0b3IgcHJvcGFnYXRvcihncmFwaCwgKmdsb2JhbERhdGEsIGNvZGVCbG9j
aywgcHJvZmlsZWRCbG9jayk7CisgICAgcHJvcGFnYXRvci5maXhwb2ludCgpOworICAgIAorI2lm
IERGR19ERUJVR19WRVJCT1NFCisgICAgZ3JhcGguZHVtcChjb2RlQmxvY2spOworI2VuZGlmCit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KSAmJiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdQcm9wYWdhdGlvbl9oCisjZGVmaW5lIERGR1Byb3BhZ2F0aW9uX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVzcGFj
ZSBERkcgeworCisvLyBQcm9wYWdhdGUgZHluYW1pYyBwcmVkaWN0aW9ucyBmcm9tIHZhbHVlIHNv
dXJjZXMgdG8gdmFyaWFibGVzLgorI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKK3Zv
aWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKik7CisjZWxzZQor
aW5saW5lIHZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKikg
eyB9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYKKyNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lv
biA5NDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsOSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRl
KiBleGVjLCBDYWxsTGluCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkp
OwogICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5n
bG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0lu
Y29taW5nQ2FsbCgmY2FsbExpbmtJbmZvKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFw
LmgJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxl
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNiArMjE4LDggQEAgaW5saW5lIEhhbmRsZUhl
YXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVhcAogICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhlYXAp
CiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisgICAg
LCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkBAIC0yMjUsNiArMjI3LDggQEAg
aW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aQogICAgIDogbV9oYW5kbGVI
ZWFwKDApCiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDAp
CisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTYgQEAgSklUOjpK
SVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogewogfQogCisjaWYgRU5BQkxFKFRJ
RVJFRF9DT01QSUxBVElPTikKK3ZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1p
emF0aW9uQ2hlY2tLaW5kIGtpbmQpCit7CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hB
ZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/
IDEgOiAzMCksIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPm1fZXhlY3V0ZUNvdW50ZXIp
KTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBraW5kID09IExvb3BPcHRpbWl6YXRp
b25DaGVjayA/IGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3AgOiBjdGlfb3B0aW1pemVfZnJvbV9yZXQp
OworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKK30K
KyNlbmRpZgorCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHZvaWQgSklUOjplbWl0VGltZW91dENo
ZWNrKCkKIHsKQEAgLTEwMiw2ICsxMTIsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygp
CiAgICAgc3R1YkNhbGwuY2FsbCh0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CiAgICAgc3R1YkNhbGwu
Z2V0QXJndW1lbnQoMCwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVsb2FkIGxhc3QgcmVzdWx0IHJlZ2lz
dGVycy4KICAgICBza2lwVGltZW91dC5saW5rKHRoaXMpOworICAgIAorICAgIGVtaXRPcHRpbWl6
YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2Vsc2UKIHZvaWQgSklUOjpl
bWl0VGltZW91dENoZWNrKCkKQEAgLTExMSw2ICsxMjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVv
dXRDaGVjaygpCiAgICAgc2tpcFRpbWVvdXQubGluayh0aGlzKTsKIAogICAgIGtpbGxMYXN0UmVz
dWx0UmVnaXN0ZXIoKTsKKyAgICAKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGlt
aXphdGlvbkNoZWNrKTsKIH0KICNlbmRpZgogCkBAIC02MjMsNyArNjM3LDcgQEAgSklUQ29kZSBK
SVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAg
ICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihh
cml0eUNoZWNrKTsKLQorICAgIAogICAgIHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpLCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiB9CiAKQEAgLTYzNyw2ICs2NTEsOSBA
QCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFTU0VS
VCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxs
ZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIsIGNvZGUpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+
bGlua0luY29taW5nQ2FsbChjYWxsTGlua0luZm8pOwogICAgIH0KIAogICAgIC8vIHBhdGNoIHRo
ZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNiArOTcyLDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBMb2FkcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2luZ2xl
IGNoYXJhY3RlciBzdHJpbmcgaW50byBkc3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFyYWN0
ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVy
ZXMpOwogICAgICAgICAKKyAgICAgICAgZW51bSBPcHRpbWl6YXRpb25DaGVja0tpbmQgeyBMb29w
T3B0aW1pemF0aW9uQ2hlY2ssIFJldE9wdGltaXphdGlvbkNoZWNrIH07CisjaWYgRU5BQkxFKFRJ
RVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0
aW1pemF0aW9uQ2hlY2tLaW5kKTsKKyNlbHNlCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlv
bkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2luZCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAgICAg
ICAgIHZvaWQgZW1pdFRpbWVvdXRDaGVjaygpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9p
ZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2
aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFZhcmFyZ3NTbG93Q2FzZShJCiAKIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRP
cHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKIAogICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsK
QEAgLTExOCw2ICsxMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1
cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRp
bWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCB0aGlzUmVnID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIzICsyNyw1MCBAQAogI2RlZmluZSBKSVRDb2RlX2gK
IAogI2lmIEVOQUJMRShKSVQpCi0KICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJK
U1ZhbHVlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAi
UHJvZmlsZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShKSVQp
CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKKyNlbmRp
ZgogICAgIAogICAgIGNsYXNzIEpJVENvZGUgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHR5
cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CisjZWxzZQorICAgICAgICBKSVRDb2RlKCkgeyB9
CisjZW5kaWYKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxsVGh1
bmssIEJhc2VsaW5lSklULCBERkdKSVQgfTsKLQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpJ
VFR5cGUgYm90dG9tVGllckpJVCgpCisgICAgICAgIHsKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJ
TEFUSU9OKQorICAgICAgICAgICAgcmV0dXJuIEJhc2VsaW5lSklUOworI2Vsc2UKKyAgICAgICAg
ICAgIHJldHVybiBERkdKSVQ7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIG5l
eHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChqaXRUeXBlLCBqaXRUeXBlID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0gREZH
SklUKTsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgSklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAgfQpA
QCAtNTMsNyArODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICwgbV9qaXRUeXBl
KGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBib29s
IG9wZXJhdG9yICEoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gIW1fcmVm
Lm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTI0LDEwICsxNTEsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBDb2RlUmVmIG1fcmVmOwogICAgICAgICBKSVRUeXBlIG1faml0
VHlwZTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIH07CiAKIH07CiAKICNlbmRpZgotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2
aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiArNDUyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGVh
cl9vZmZfYXJndW1lbnRzKElucwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0
aW1pemF0aW9uQ2hlY2spOworICAgIAogICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSBy
ZWdUMSk7CiAgICAgQVNTRVJUKHJlZ1QxICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFT
U0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVyICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQ3Miw2
ICs0NzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAKIHZv
aWQgSklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25D
aGVjayk7CisgICAgCiAgICAgQVNTRVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAg
ICBBU1NFUlQocmVnVDEgIT0gcmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJldHVy
blZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiArMTgx
NiwzMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9jaGVja19oYXNfCiAgICAgVk1f
VEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcHRpbWl6ZV9mcm9tX2xvb3ApCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxs
RnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQo
Y2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQu
XG4iKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9yZXQp
Cit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVjdCog
ZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWlu
KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0
aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gcmV0IGZhaWxlZC5cbiIpOworfQorCiBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfaW5zdGFuY2VvZikKIHsKICAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5oCShyZXZpc2lvbiA5NDQ5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIzLDYgKzQyMyw4IEBAIGV4dGVybiAiQyIg
ewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1bWVu
dHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90aHJv
d19yZWZlcmVuY2VfZXJyb3IoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJVF9T
VFVCIGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX3JldChTVFVCX0FSR1NfREVDTEFSQVRJT04p
OwogICAgIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hl
Y2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2Fs
bF9qaXRDb21waWxlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTQ0OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNjYgKzI4LDE2IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUg
IkpJVC5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlVTdHJpbmdCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNsdWRlICJE
RkdCeXRlQ29kZVBhcnNlci5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCi0jZW5kaWYK
LQogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBFeGVjdXRhYmxlQmFzZTo6c19p
bmZvID0geyAiRXhlY3V0YWJsZSIsIDAsIDAsIDAgfTsKIAotI2lmIEVOQUJMRShKSVQpCi0jaWYg
RU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlKEV4ZWNTdGF0ZSogZXhl
YywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUpCi17Ci0jaWYgRU5BQkxF
KERGR19KSVRfUkVTVFJJQ1RJT05TKQotICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0
IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVyIHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBh
cmUgYW55IGp1bXAgdGFyZ2V0cy4KLSAgICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJn
ZXRzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVF9S
RVNUUklDVElPTlMpCi0KLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIERGRzo6R3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
LCBjb2RlQmxvY2stPm1fbnVtVmFycyk7Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEs
IGNvZGVCbG9jaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERGRzo6SklUQ29tcGls
ZXIgZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFGbG93
SklULmNvbXBpbGUoaml0Q29kZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29s
IHRyeURGR0NvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVl
QXJnc0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKLXsKLSNpZiBFTkFCTEUoREZH
X0pJVF9SRVNUUklDVElPTlMpCi0gICAgLy8gRklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQgc3Vw
cG9ydGVkLCBkb24ndCBib3RoZXIgc2Nhbm5pbmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBh
bnkganVtcCB0YXJnZXRzLgotICAgIGlmIChjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RS
SUNUSU9OUykKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgREZHOjpHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNv
ZGVCbG9jay0+bV9udW1WYXJzKTsKLSAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNhbGxlZUFyZ3NFeGVj
KQotICAgICAgICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMpOwotCi0g
ICAgREZHOjpKSVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9j
ayk7Ci0gICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKGppdENvZGUsIGppdENvZGVXaXRo
QXJpdHlDaGVjayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZWxzZSAvLyBFTkFCTEUoREZHX0pJ
VCkKLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklU
Q29kZSYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVuY3Rp
b24oRXhlY1N0YXRlKiwgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNs
ZWFyQ29kZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE2Niw4ICsxMTYsMTggQEAgRnVuY3Rp
b25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoRQogewogfQogCitKU09iamVjdCogRXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5k
eW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAg
IEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklUVHlw
ZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENv
ZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsK
KyAgICByZXR1cm4gZXJyb3I7Cit9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBl
eGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSkKIHsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTgzLDI2ICsxNDMsNDEgQEAg
SlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogCiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7
CiAKLSAgICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0g
YWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5w
cm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRyPEJ5
dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9y
KGV2YWxOb2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xU
YWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4g
cHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VS
VCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVC
bG9jayk7CisgICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2so
dGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+
bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8
Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0
b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0
ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24g
PSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay5jbGVh
cigpOworICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxD
b2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAg
ICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAg
ICB9CiAKICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2V2YWxDb2RlQmxvY2st
PmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChl
eGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxl
ZCA9IHRyeURGR0NvbXBpbGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVG
b3JDYWxsKTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21w
aWxlZCA9IGZhbHNlOworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisg
ICAgICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBtX2V2YWxDb2Rl
QmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQp
CisgICAgICAgICAgICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSB8fCAh
bV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5oYXNJbmNvbWluZ0NhbGxzKCkpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0aXZl
IHBpZWNlIG9mIGNvZGUgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAg
IC8vIEpJVCwgc28gd2UgY2FuIHNpbGVudGx5IGZhaWwuCisgICAgICAgICAgICAgICAgbV9ldmFs
Q29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2Rl
QmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2V2YWxDb2Rl
QmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpj
b21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkp
OworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICgh
Qnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9l
dmFsQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBtX2V2YWxD
b2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0yNjEsMTAgKzIzNiwxOSBAQCBKU09iamVjdCog
UHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIH0K
IAotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgQVNTRVJUKCFtX3Byb2dyYW1Db2RlQmxvY2sp
OworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Cisg
ICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAw
OworICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0
b3BUaWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3Bl
Q2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJ
VFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgcmV0dXJu
IGVycm9yOworfQogCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5h
bChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29k
ZTo6SklUVHlwZSBqaXRUeXBlKQorewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CkBAIC0yNzcsMjUgKzI2MSw0MCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVD
aGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICAKLSAgICBtX3Byb2dyYW1Db2RlQmxv
Y2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9i
YWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5v
ZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBt
X3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlv
dXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VSVCgo
aml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9j
ayk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2RlQmxv
Y2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBw
cmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUu
Z2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3By
b2dyYW1Db2RlQmxvY2suZ2V0KCksICEhbV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
ID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJh
dG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsK
KyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFt
Q29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAg
ICAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRp
b247CiAgICAgfQogCiAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9wcm9n
cmFtQ29kZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGJv
b2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jay5n
ZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAg
ICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklU
Q29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGUo
ZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAgICAg
ICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAg
ICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3Jh
bUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Cisg
ICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29v
bigpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFs
RGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUo
T1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dl
bmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+ZGlzY2FyZEJ5
dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5zZXRKSVRDb2Rl
KG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5k
aWYKIApAQCAtMzQyLDcgKzM0MSwyOSBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNv
ZGUoKQogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQorSlNPYmpl
Y3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVl
QXJnc0V4ZWMpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFs
T2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIEpTT2JqZWN0
KiBlcnJvciA9IDA7CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgpICE9
IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbElu
dGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6bmV4
dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQo
ISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3Qq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBBU1NFUlQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlm
IChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRp
ZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhl
Yywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUpCiB7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CkBAIC0z
NTgsMTEgKzM3OSwxMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9y
CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmds
b2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAg
ICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhp
cywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJj
ZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9y
PiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNj
b3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJs
b2NrRm9yQ2FsbC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVC
bG9jayA9IG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBl
ID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAg
ICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhp
cywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJj
ZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsK
KyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0
ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9y
Q2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAhIW1fY29kZUJs
b2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5n
Q29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAg
ICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9j
b2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0
YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+
cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTM3MywxNyArMzk1LDMxIEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0g
bV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVz
dHJveURhdGEoKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmNvcHlEYXRhRnJvbUFsdGVybmF0
aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2Fu
VXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGVGdW5j
dGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2pp
dENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBp
ZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CisgICAg
ICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBp
bGVkID0gREZHOjp0cnlDb21waWxlRnVuY3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29k
ZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBp
ZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1f
Y29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0
ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRp
Y19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVs
ZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+
ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxl
ID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2Fs
bCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tG
b3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLQorICAgICAg
ICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVH
ZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9jb2RlQmxvY2tG
b3JDYWxsLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9j
b2RlQmxvY2tGb3JDYWxsLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY2Fs
bGVlQXJnc0V4ZWMpOwpAQCAtNDAzLDggKzQzOSwxMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogewor
ICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKKyAgICAKICAgICBKU09iamVjdCogZXhjZXB0aW9u
ID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xv
YmFsRGF0YTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEt
PnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/
IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKQEAgLTQxOSwxMSAr
NDU3LDEyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2Jq
ZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAg
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2so
dGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNv
dXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRydWUpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwg
c2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBw
cmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnJlbGVhc2UoKTsKKyAg
ICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlv
dXNDb2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIobmV3
IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3Vy
Y2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCB0cnVlLCBwcmV2aW91c0Nv
ZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVy
YXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFp
bk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC5nZXQoKSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRp
dmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29k
ZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdl
bmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qu
Y2xlYXIoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRl
cl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFz
ZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTQzNCwxNCArNDczLDMwIEBAIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0
cm95RGF0YSgpOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21BbHRl
cm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgp
LmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29t
cGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qu
Z2V0KCksICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGJv
b2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgcG9zc2li
bGUgdG8gY29tcGlsZSBjb25zdHJ1Y3RvcnMgd2l0aCBERkcuCisgICAgICAgIGlmIChkZmdDb21w
aWxlZCkgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5h
dGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRlcm5h
dGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8
RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJu
YXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRvbnRP
cHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29u
c3RydWN0ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBp
ZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAg
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAg
ICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNldEpJVENvZGUobV9qaXRD
b2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CiAg
ICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDk0NDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTAgKzMwNiwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1p
Y0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAg
ICAgICAgaWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21w
aWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9y
ID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21U
aWVySklUKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9j
ayk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2Rl
Kik7CiAKICAgICAgICAgRXZhbENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAg
ICB7CkBAIC0zNDQsNyArMzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBT
Y3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUo
RXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2JqZWN0
KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJ
VENvZGU6OkpJVFR5cGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYpOwogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKQEAgLTM2OSwxMSArMzcx
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERh
dGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9
IDA7CiAgICAgICAgICAgICBpZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgICAg
ICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAg
ICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJ
VENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEh
bV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAg
fQogCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CisKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNv
ZGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsK
QEAgLTQwMyw3ICs0MDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlw
dEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZShF
eGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVj
dCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6
SklUVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIApAQCAtNDUwLDExICs0NTQsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5
bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAg
ICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVycm9y
ID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJn
c0V4ZWMpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChl
eGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxs
KTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSos
IEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsKKwogICAgICAgICBib29sIGlzR2VuZXJh
dGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVC
bG9ja0ZvckNhbGw7CkBAIC00NzEsMTEgKzQ3NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAg
ICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAgZXJy
b3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJ
VENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEh
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAg
ICAgICB9CiAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3Qo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKwogICAgICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ29uc3RydWN0KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0OwpAQCAtNTAxLDYgKzUwOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRp
bWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
Y29tcGlsZU9wdGltaXplZEZvciBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhIGNhbGxmcmFt
ZSBzZXQgdXAgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAgICAgLy8gc2luY2Ugd2Ug
d2lsbCBtYWtlIHNwZWN1bGF0aXZlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlIGFyZ3VtZW50
cy4KKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7CisgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAgICAg
ICAgICAgIEFTU0VSVChhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkg
PT0gdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVj
LCBzY29wZUNoYWluTm9kZSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29u
c3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtNTQ5LDggKzU3
MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9i
YWxEYXRhJiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wg
Zm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBib29sKTsKICAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNv
bnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgYm9vbCk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKTsK
LSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRl
cm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4
ZWMsIEpJVENvZGU6OkpJVFR5cGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlw
ZSk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJl
RmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0NDk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NjAsMTEgKzk2MCwyMyBAQAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lm
ICFkZWZpbmVkKEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04pICYmIEVOQUJMRShERkdfSklUKQor
I2RlZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBDdXJyZW50
bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9S
TShNQUMpICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUo
SklUKSAmJiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9W
QUxVRV9QUk9GSUxFUiAwCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9EWU5BTUlDX09Q
VElNSVpBVElPTikKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKSAmJiBFTkFCTEUoVkFM
VUVfUFJPRklMRVIpCisjZGVmaW5lIEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiAxCisjZWxz
ZQorI2RlZmluZSBFTkFCTEVfRFlOQU1JQ19PUFRJTUlaQVRJT04gMAorI2VuZGlmCisjZW5kaWYK
KwogI2lmICFkZWZpbmVkKEVOQUJMRV9WRVJCT1NFX1ZBTFVFX1BST0ZJTEUpICYmIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKICNkZWZpbmUgRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSAwCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtl
ZExpc3QuaAkocmV2aXNpb24gOTQ0OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Nl
bnRpbmVsTGlua2VkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNCArNDEsNjMgQEAgbmFt
ZXNwYWNlIFdURiB7CiAKIGVudW0gU2VudGluZWxUYWcgeyBTZW50aW5lbCB9OwogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgTm9kZT4gY2xhc3MgU2VudGluZWxMaW5rZWRMaXN0IHsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBCYXNpY1Jhd1NlbnRpbmVsTm9kZSB7CiBwdWJsaWM6Ci0gICAgdHlw
ZWRlZiBOb2RlKiBpdGVyYXRvcjsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZShTZW50aW5lbFRh
ZykKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKCkKKyAgICAgICAgOiBtX25leHQoMCkK
KyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UHJl
dihCYXNpY1Jhd1NlbnRpbmVsTm9kZSogcHJldikgeyBtX3ByZXYgPSBwcmV2OyB9CisgICAgdm9p
ZCBzZXROZXh0KEJhc2ljUmF3U2VudGluZWxOb2RlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0K
KyAgICAKKyAgICBUKiBwcmV2KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJldik7IH0K
KyAgICBUKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fbmV4dCk7IH0KKyAgICAK
KyAgICBib29sIGlzT25MaXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghIW1fcHJl
diA9PSAhIW1fbmV4dCk7CisgICAgICAgIHJldHVybiAhIW1fcHJldjsKKyAgICB9CisgICAgCisg
ICAgdm9pZCByZW1vdmUoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmFzaWNSYXdTZW50aW5lbE5v
ZGUqIG1fbmV4dDsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9wcmV2OworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGUgPSBUPiBjbGFzcyBTZW50aW5lbExp
bmtlZExpc3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAKICAgICBTZW50
aW5lbExpbmtlZExpc3QoKTsKIAotICAgIHZvaWQgcHVzaChOb2RlKik7Ci0gICAgc3RhdGljIHZv
aWQgcmVtb3ZlKE5vZGUqKTsKKyAgICB2b2lkIHB1c2goVCopOworICAgIHN0YXRpYyB2b2lkIHJl
bW92ZShUKik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpOwogICAgIGl0ZXJhdG9yIGVuZCgpOwog
CiBwcml2YXRlOgotICAgIE5vZGUgbV9oZWFkU2VudGluZWw7Ci0gICAgTm9kZSBtX3RhaWxTZW50
aW5lbDsKKyAgICBSYXdOb2RlIG1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUgbV90YWlsU2Vu
dGluZWw7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsTGlu
a2VkTGlzdDxOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PiB2b2lkIEJhc2ljUmF3U2VudGluZWxOb2RlPFQ+OjpyZW1vdmUoKQoreworICAgIFNlbnRpbmVs
TGlua2VkTGlzdDxULCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxUPiA+OjpyZW1vdmUoc3RhdGljX2Nh
c3Q8VCo+KHRoaXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05v
ZGU+IGlubGluZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OlNlbnRpbmVsTGlua2Vk
TGlzdCgpCiAgICAgOiBtX2hlYWRTZW50aW5lbChTZW50aW5lbCkKICAgICAsIG1fdGFpbFNlbnRp
bmVsKFNlbnRpbmVsKQogewpAQCAtNjksMjEgKzEwOCwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Tm9kZT4gaW5saW5lIFNlbnRpbmVsCiAgICAgbV90YWlsU2VudGluZWwuc2V0TmV4dCgwKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtl
ZExpc3Q8Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6YmVnaW4oKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBT
ZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlz
dDxULCBSYXdOb2RlPjo6YmVnaW4oKQogewotICAgIHJldHVybiBtX2hlYWRTZW50aW5lbC5uZXh0
KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX2hlYWRTZW50aW5lbC5uZXh0KCkpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlu
a2VkTGlzdDxOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjplbmQoKQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBT
ZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlz
dDxULCBSYXdOb2RlPjo6ZW5kKCkKIHsKLSAgICByZXR1cm4gJm1fdGFpbFNlbnRpbmVsOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUKj4oJm1fdGFpbFNlbnRpbmVsKTsKIH0KIAotdGVtcGxhdGUg
PHR5cGVuYW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cHVz
aChOb2RlKiBub2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlu
bGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6cHVzaChUKiBub2RlKQog
ewogICAgIEFTU0VSVChub2RlKTsKLSAgICBOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOwot
ICAgIE5vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgQVNTRVJUKCFub2Rl
LT5wcmV2KCkpOworICAgIEFTU0VSVCghbm9kZS0+bmV4dCgpKTsKKyAgICAKKyAgICBSYXdOb2Rl
KiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUqIG5leHQgPSBtX2hlYWRTZW50
aW5lbC5uZXh0KCk7CiAKICAgICBub2RlLT5zZXRQcmV2KHByZXYpOwogICAgIG5vZGUtPnNldE5l
eHQobmV4dCk7CkBAIC05MiwxNyArMTM0LDI1IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBp
bmxpbmUgdm9pZCBTZW4KICAgICBuZXh0LT5zZXRQcmV2KG5vZGUpOwogfQogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgTm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1v
dmUoTm9kZSogbm9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBp
bmxpbmUgdm9pZCBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OnJlbW92ZShUKiBub2Rl
KQogewotICAgIE5vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7Ci0gICAgTm9kZSogbmV4dCA9IG5v
ZGUtPm5leHQoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCEhbm9kZS0+cHJldigp
KTsKKyAgICBBU1NFUlQoISFub2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYg
PSBub2RlLT5wcmV2KCk7CisgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKIAogICAg
IHByZXYtPnNldE5leHQobmV4dCk7CiAgICAgbmV4dC0+c2V0UHJldihwcmV2KTsKKyAgICAKKyAg
ICBub2RlLT5zZXRQcmV2KDApOworICAgIG5vZGUtPnNldE5leHQoMCk7CiB9CiAKIH0KIAordXNp
bmcgV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTsKIHVzaW5nIFdURjo6U2VudGluZWxMaW5rZWRM
aXN0OwogCiAjZW5kaWYK
</data>
<flag name="review"
          id="102660"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="102661"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106369</attachid>
            <date>2011-09-05 17:49:31 -0700</date>
            <delta_ts>2011-09-05 18:07:39 -0700</delta_ts>
            <desc>the patch - partial fix review</desc>
            <filename>dynopt_patch_12.diff</filename>
            <type>text/plain</type>
            <size>134016</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgwIEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
dGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAor
ICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0
b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2Rl
QmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNv
dW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3Vl
cyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bwor
ICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAg
ICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMs
IGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0
IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJz
dHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBz
dWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9y
bWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0
byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBz
dGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAg
Tm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlz
IGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFp
bGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYg
KHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3Bz
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZp
bGVzLmNtZDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzIpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhp
c3RpbmdFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRl
cm5hdGl2ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToK
KyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9j
azo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpj
b21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlND
OjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJs
b2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxl
Lmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OlZh
bHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3RpY3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6ZHluYW1pY2FsbHlQcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2UpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0
cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29t
cGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFy
Z3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEds
b2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0RvdWJs
ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZkpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmlzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0lu
dDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0RvdWJsZUNv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVPZkpTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSW50MzJDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZEb3VibGVDb25zdGFu
dCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGxQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjppc051bWJlclByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjptYWtlUHJlZGljdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmlzSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aXNEb3VibGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkludDMy
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhbHVlT2ZEb3VibGVDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RG
R1Byb3BhZ2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6Om1lcmdlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFn
YXRvcjo6cHJvcGFnYXRlRm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
cHJvcGFnYXRlQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAqIGhlYXAvSGFuZGxlSGVhcC5oOgorICAgICAgICAo
SlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRUaW1lb3V0Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGpp
dC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6dG9w
VGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om5leHRUaWVySklUKToKKyAgICAgICAg
KiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgor
ICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAg
KEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlND
OjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6
Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRG
b3IpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9TZW50aW5lbExp
bmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OkJhc2ljUmF3
U2VudGluZWxOb2RlKToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnNldFBy
ZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0TmV4dCk6CisgICAg
ICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpwcmV2KToKKyAgICAgICAgKFdURjo6QmFz
aWNSYXdTZW50aW5lbE5vZGU6Om5leHQpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTo6aXNPbkxpc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6
Ojo6U2VudGluZWxMaW5rZWRMaXN0KToKKyAgICAgICAgKFdURjo6OjpiZWdpbik6CisgICAgICAg
IChXVEY6Ojo6ZW5kKToKKyAgICAgICAgKFdURjo6OjpwdXNoKToKKwogMjAxMS0wOS0wNSAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjk0NDQ1IGFuZCByOTQ0NDguCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAgU0VUKEph
dmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2Fzc2VtYmxlciIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J5dGVjb2RlIgogICAg
ICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvbXBpbGVyIgorICAgICIke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vZGZnIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaGVhcCIKICAgICAiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2RlYnVnZ2VyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
aW50ZXJwcmV0ZXIiCkBAIC01NCw3ICs1NSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0
aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAotCisgICAgCiAgICAg
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAogICAgIGludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAogICAgIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGphdmFz
Y3JpcHRjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIgXAor
CS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcgXAogCS1JJChzcmNkaXIpL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3
YXJkaW5nSGVhZGVycyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw4IEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNU
cmFja2VyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGUFJJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbklu
Zm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmggXApAQCAtMTE2
LDYgKzExOCw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRv
ci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU1MCw2ICsxNTUwLDE0IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KKyAgICAgICAgICAgICAgICA8RmlsdGVy
CisgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJkZmciCisgICAgICAgICAgICAgICAgICAg
ICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXGRmZ1xERkdEcml2ZXIuaCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9G
aWxlPgorICAgICAgICAgICAgICAgIDwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJy
IgogCQkJPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwkocmV2aXNpb24gOTQ1MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3
IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2
YVNjcmlwdENvcmVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4u
L3BhcnNlci87Li4vLi4vYnl0ZWNvbXBpbGVyLzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUvOy4u
Ly4uL2J5dGVjb2RlLzsuLi8uLi9pbnRlcnByZXRlci87Li4vLi4vd3RmLzsuLi8uLi9wcm9maWxl
cjsuLi8uLi9hc3NlbWJsZXIvOy4uLy4uL2RlYnVnZ2VyLzsuLi8uLi9oZWFwLzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rp
cilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxp
bmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXEphdmFT
Y3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHBy
aXZhdGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVhZHMm
cXVvdDsiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNjcmlwdENvcmVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4u
Ly4uLzsuLi8uLi9BUEkvOy4uLy4uL3BhcnNlci87Li4vLi4vYnl0ZWNvbXBpbGVyLzsuLi8uLi9k
ZmcvOy4uLy4uL2ppdC87Li4vLi4vcnVudGltZS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVy
cHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87Li4vLi4v
ZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRl
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7
JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktp
dExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OyIKIAkJUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnM9Il9fU1REX0MiCiAJCUZvcmNlZEluY2x1ZGVGaWxlcz0iSUNVVmVyc2lvbi5oIgog
CS8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5j
bWQJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNtZAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBta2RpciAiJVByaXZhdGVIZWFkZXJzRGlyZWN0b3J5JSIgMj5OVUwK
IGZvciAlJWQgaW4gKAogICAgIGFzc2VtYmxlcgogICAgIGJ5dGVjb2RlCisgICAgZGZnCiAgICAg
aGVhcAogICAgIGRlYnVnZ2VyCiAgICAgaW50ZXJwcmV0ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw2ICs1NiwxMCBAQAogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAg
Ki87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1
MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZU
YWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87
IH07CisJCTBGRDNDODI1MTQxMTVENDAwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVE
MUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLzsgfTsKKwkJMEZEM0M4MjYxNDExNUQ0
MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLzsgfTsKKwkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQx
MTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi87IH07CisJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMzc1LDcgKzM3
OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3MjcwRUQxQ0U2OTAwRjFG
NjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2OUEwNzJCMEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdp
c3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5oICovOyB9OwogCQk5NjlBMDcy
QzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyOTBFRDFDRTY5MDBGMUY2ODEgLyog
U2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0JCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IH07CisJCTk2
OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8q
IENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3Ry
aWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5QTA3OTcwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5
QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29k
ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovOyB9OwogCQk5NjlB
MDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJ
bnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5LDYgKzc4MywxMCBAQAogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFi
bGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0
aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4
MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvcGFnYXRvci5jcHA7IHBhdGggPSBkZmcvREZHUHJv
cGFnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNDODI0MTQxMTVE
MjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0Fs
bG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEwIEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFE
NyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8sCisJCQkJMEZE
M0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3BwICovLAorCQkJCTBGRDND
ODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKKwkJCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLywKIAkJCQk4NkVDQTRGMDEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAy
QjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI2MTcsNiArMjYyOSw4IEBACiAJ
CQkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyMkM1MzE0MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzMsNiArMzA0Nyw4IEBACiAJCQlpc2Eg
PSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFn
YXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQz
QzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw2ICsxMDgsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywg
YWRkcmVzcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMkFic29sdXRlKFJlc3VsdENv
bmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRlc3QubV9wdHIp
OworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQp
KSk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9ybShyaWdodCwgbGVmdC5tX3B0cik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMSw2ICsx
MDAxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4
NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBzcmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZGVzdC5t
X3B0ciksIFg4NlJlZ2lzdGVyczo6cjExKTsKKyAgICAgICAgYWRkMzIoc3JjLCBBZGRyZXNzKFg4
NlJlZ2lzdGVyczo6cjExKSk7CisjZWxzZQorICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2ltKHNy
Yy5tX3ZhbHVlLCBkZXN0Lm1fcHRyKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gSnVtcChtX2Fz
c2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCiAgICAgSnVtcCBicmFu
Y2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVz
dCkKICAgICB7CiAgICAgICAgIGFkZDMyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShy
ZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnNldENDX3IoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0
KTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwogICAgIH0KKyAg
ICAKKyAgICBKdW1wIGJyYW5jaEFkZDMyQWJzb2x1dGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRy
dXN0ZWRJbW0zMiBzcmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGRlc3QubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBh
ZGQzMihzcmMsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CiAKICAgICBKdW1w
IGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMSw5ICsx
NDAxLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiAjZW5kaWYKIH0KIAot
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
U3ltYm9sVGFibGUqIHN5bVRhYiwgYm9vbCBpc0NvbnN0cnVjdG9yKQorQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlw
ZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqIHN5
bVRhYiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRp
dmUpCiAgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3du
ZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkuaGVhcCkKKyAgICAsIG1fZXhlY3V0ZUNvdW50ZXIoLTEwMDApIC8vIHRy
aWdnZXIgb3B0aW1pemF0aW9uIHdoZW4gc2lnbiBiaXQgY2xlYXJzCiAgICAgLCBtX251bUNhbGxl
ZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMo
MCkKQEAgLTE0MjIsNiArMTQyMyw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9zb3VyY2VP
ZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCisgICAgLCBt
X2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQogewogICAgIEFTU0VSVChtX3NvdXJjZSk7CiAKQEAg
LTE0NDEsMTUgKzE0NDMsMTggQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiICAgYXJnID0gJXU6ICIsIGkgKyAxKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICIsIHByb2ZpbGUtPmJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAg
InNhbXBsZXMgPSAldSwgaW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJyYXkg
PSAldVxuIiwKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSwKLSAg
ICAgICAgICAgICAgICBwcm9maWxlLT5wcm9iYWJpbGl0eU9mSW50MzIoKSwKLSAgICAgICAgICAg
ICAgICBwcm9maWxlLT5wcm9iYWJpbGl0eU9mRG91YmxlKCksCi0gICAgICAgICAgICAgICAgcHJv
ZmlsZS0+cHJvYmFiaWxpdHlPZkNlbGwoKSwKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5wcm9i
YWJpbGl0eU9mQXJyYXkoKSk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3RkZXJyKTsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogICAgIH0KICNlbmRpZgorICAgIAorICAgIC8vIFdl
IHNob3VsZCBub3QgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgdGhlcmUgYXJlIGluY29taW5nIGNh
bGxzLiBCdXQKKyAgICAvLyBpZiB0aGlzIGlzIGNhbGxlZCBkdXJpbmcgaGVhcCBkZXN0cnVjdGlv
biwgdGhlbiB0aGVyZSBtYXkgc3RpbGwgYmUKKyAgICAvLyBpbmNvbWluZyBjYWxscywgd2hpY2gg
aXMgaGFybWxlc3MuCisgICAgCisgICAgLy8gTm90ZSB0aGF0IG91ciBvdXRnb2luZyBjYWxscyB3
aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBDb2RlQmxvY2tzJworICAgIC8vIG1faW5jb21pbmdD
YWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB+Q2FsbExpbmtJ
bmZvCisgICAgLy8gZGVzdHJ1Y3RvcnMuCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGZvciAoc2l6
ZV90IHNpemUgPSBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQpAQCAtMTUxOSw2ICsxNTI0LDggQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdAogewogICAgIGJvb2wgaGFuZGxlV2Vha1JlZmVyZW5jZXMgPSBmYWxzZTsKICAg
ICAKKyAgICBpZiAoISFtX2FsdGVybmF0aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3Qp
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7CiAgICAgaWYgKG1fcmFy
ZURhdGEpIHsKQEAgLTE3ODksOCArMTc5NiwzMCBAQCB2b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0
aXZhdGlvbihDYWxsRnJhCiB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ2FsbExpbmtJ
bmZvOjp1bmxpbmsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZXBhdGNoQnVmZmVyJiByZXBh
dGNoQnVmZmVyKQoreworICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKKyAgICAKKyAgICBpZiAoaXNE
RkcpIHsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Q29kZUxvY2F0aW9uQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGwgPyBvcGVyYXRpb25M
aW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworI2Vsc2UKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwgaXNDYWxs
PyBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6IGdsb2JhbERhdGEu
aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOworICAgIGhhc1NlZW5TaG91bGRS
ZXBhdGNoID0gZmFsc2U7CisgICAgY2FsbGVlLmNsZWFyKCk7CisKKyAgICAvLyBJdCB3aWxsIGJl
IG9uIGEgbGlzdCBpZiB0aGUgY2FsbGVlIGhhcyBhIGNvZGUgYmxvY2suCisgICAgaWYgKGlzT25M
aXN0KCkpCisgICAgICAgIHJlbW92ZSgpOworfQorCiB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2Fs
bHMoKQogeworICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUt
PnVubGlua0NhbGxzKCk7CiAgICAgaWYgKCEobV9jYWxsTGlua0luZm9zLnNpemUoKSB8fCBtX21l
dGhvZENhbGxMaW5rSW5mb3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9n
bG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKQEAgLTE3OTksMjQgKzE4MjgsMTAxIEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtDYWxscygpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbGxM
aW5rSW5mb3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3NbaV0u
aXNMaW5rZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZ2V0SklUQ29k
ZSgpLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwobV9jYWxs
TGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0Nh
bGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotI2Vsc2UK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwo
bV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tp
XS5pc0NhbGwgPyBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6
IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOwotICAg
ICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CisgICAgICAgIG1fY2FsbExpbmtJbmZv
c1tpXS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgfQogfQorCit2
b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCit7CisgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKHRoaXMpOworICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4o
KSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdp
bigpLT51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7Cit9CiAjZW5kaWYKIAog
dm9pZCBDb2RlQmxvY2s6OmNsZWFyRXZhbENhY2hlKCkKIHsKKyAgICBpZiAoISFtX2FsdGVybmF0
aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT5jbGVhckV2YWxDYWNoZSgpOwogICAgIGlmICgh
bV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVD
YWNoZS5jbGVhcigpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgcmVw
bGFjZUV4aXN0aW5nRW50cmllcyhWZWN0b3I8VD4mIHRhcmdldCwgVmVjdG9yPFQ+JiBzb3VyY2Up
Cit7CisgICAgQVNTRVJUKHRhcmdldC5zaXplKCkgPD0gc291cmNlLnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXQuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhcmdldFtp
XSA9IHNvdXJjZVtpXTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0
aXZlKCkKK3sKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fY29uc3RhbnRSZWdpc3RlcnMsIG1fYWx0ZXJu
YXRpdmUtPm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMo
bV9mdW5jdGlvbkRlY2xzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9uRGVjbHMpOworICAgIHJl
cGxhY2VFeGlzdGluZ0VudHJpZXMobV9mdW5jdGlvbkV4cHJzLCBtX2FsdGVybmF0aXZlLT5tX2Z1
bmN0aW9uRXhwcnMpOworfQorCisvLyBGSVhNRTogSW1wbGVtZW50IE9TUi4gSWYgY29tcGlsZU9w
dGltaXplZCgpIGlzIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdGhlciB0aGFuIHRoZQorLy8gZXBp
bG9ndWUsIGRvIE9TUiBmcm9tIHRoZSBvbGQgY29kZSBibG9jayB0byB0aGUgbmV3IG9uZS4KKwor
Ly8gRklYTUU6IEFmdGVyIGRvaW5nIHN1Y2Nlc3NmdWwgb3B0aW1pemVkIGNvbXBpbGF0aW9uLCBy
ZXNldCB0aGUgcHJvZmlsaW5nIGNvdW50ZXIgdG8gLTEsIHNvCisvLyB0aGF0IHRoZSBuZXh0IGV4
ZWN1dGlvbiBvZiB0aGUgb2xkIGNvZGUgYmxvY2sgd2lsbCBqdW1wIHN0cmFpZ2h0IGludG8gY29t
cGlsZU9wdGltaXplZCgpCisvLyBhbmQgcGVyZm9ybSBPU1IuCisKKy8vIEZJWE1FOiBFbnN1cmUg
dGhhdCBhIGNhbGwgdG8gY29tcGlsZU9wdGltaXplZCgpIGp1c3QgZG9lcyBPU1IgKGFuZCByZXNl
dHMgdGhlIGNvdW50ZXIgdG8gLTEpCisvLyBpZiB0aGUgY29kZSBoYWQgYWxyZWFkeSBiZWVuIGNv
bXBpbGVkLgorCitDb2RlQmxvY2sqIFByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sK
KyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRh
YmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZSgpOworfQorCitDb2RlQmxvY2sqIEV2YWxDb2RlQmxv
Y2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PEV2YWxFeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZSgpOworfQorCitDb2Rl
QmxvY2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuICZz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVy
YXRlZEJ5dGVjb2RlRm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2Rl
Rm9yQ2FsbCk7Cit9CisKK0pTT2JqZWN0KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorewor
ICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJK
SVQoZ2V0SklUVHlwZSgpKSkgeworICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1cmUg
d2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgorICAgICAgICBkb250T3B0aW1p
emVBbnl0aW1lU29vbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNPYmplY3Qq
IGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgIHJldHVybiBl
cnJvcjsKK30KKworSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYg
KHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRK
SVRUeXBlKCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24n
dCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3Ig
PSBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGls
ZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgcmV0dXJuIGVycm9yOworfQor
CitKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxh
Y2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBl
KCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQg
dGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29u
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVP
cHRpbWl6ZWRGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVG
b3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3Qu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtOTgsMTIg
Kzk5LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBFTkFCTEUoSklUKQotICAg
IHN0cnVjdCBDYWxsTGlua0luZm8geworICAgIHN0cnVjdCBDYWxsTGlua0luZm86IHB1YmxpYyBC
YXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgQ2FsbExpbmtJbmZv
KCkKICAgICAgICAgICAgIDogaGFzU2VlblNob3VsZFJlcGF0Y2goZmFsc2UpCiAgICAgICAgICAg
ICAsIGlzQ2FsbChmYWxzZSkKKyAgICAgICAgICAgICwgaXNERkcoZmFsc2UpCiAgICAgICAgIHsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgfkNhbGxMaW5rSW5mbygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZSgpOwor
ICAgICAgICB9CiAKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9u
OyAvLyBpdCdzIGEgbmVhciBjYWxsIGluIHRoZSBvbGQgSklULCBvciBhIG5vcm1hbCBjYWxsIGlu
IERGRwogICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwpAQCAt
MTExLDEzICsxMTksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpJVFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgICAgIGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2gg
OiAxOwogICAgICAgICBib29sIGlzQ2FsbCA6IDE7CisgICAgICAgIGJvb2wgaXNERkcgOiAxOwog
CiAgICAgICAgIGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBjYWxsZWU7IH0KLSAgICAgICAgdm9p
ZCB1bmxpbmsoKQotICAgICAgICB7Ci0gICAgICAgICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9
IGZhbHNlOwotICAgICAgICAgICAgY2FsbGVlLmNsZWFyKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
dm9pZCB1bmxpbmsoSlNHbG9iYWxEYXRhJiwgUmVwYXRjaEJ1ZmZlciYpOwogCiAgICAgICAgIGJv
b2wgc2Vlbk9uY2UoKQogICAgICAgICB7CkBAIC0yMTAsMTMgKzIxNSwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVQ7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUsIGJvb2wgaXNDb25zdHJ1Y3Rvcik7CisgICAgICAgIENvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCos
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJv
bFRhYmxlKiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJu
YXRpdmUpOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxP
YmplY3Q7CiAgICAgICAgIEhlYXAqIG1faGVhcDsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdmly
dHVhbCB+Q29kZUJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQorICAgICAgICBQYXNzT3duUHRy
PENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5y
ZWxlYXNlKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwpAQCAtMjc5
LDYgKzI4NywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
dW5saW5rQ2FsbHMoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaGFzSW5jb21pbmdDYWxscygp
IHsgcmV0dXJuIG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQo
KTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxMaW5rSW5m
byogaW5jb21pbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5jb21pbmdDYWxscy5wdXNo
KGluY29taW5nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB1bmxpbmtJbmNv
bWluZ0NhbGxzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTMwMCw4
ICszMTcsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0g
ICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2lzQ29uc3RydWN0b3IgPyBv
d25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpIDogb3duZXJF
eGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCk7IH0KKyAgICAgICAgdm9pZCBz
ZXRKSVRDb2RlKGNvbnN0IEpJVENvZGUmIGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
V2l0aEFyaXR5Q2hlY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7
CisgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKKyAgICAgICAgfQorICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJu
IG1faml0Q29kZS5qaXRUeXBlKCk7IH0KICAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGV4ZWN1dGFi
bGVQb29sKCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVQb29sKCk7IH0KKyAg
ICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSopID0gMDsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
KCkgPSAwOworI2Vsc2UKKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyBy
ZXR1cm4gSklUQ29kZTo6QmFzZWxpbmVKSVQ7IH0KICNlbmRpZgogCiAgICAgICAgIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRh
YmxlLmdldCgpOyB9CkBAIC0zOTgsNiArNDI1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFZhbHVlUHJv
ZmlsZSwgaW50LCBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV92YWx1ZVByb2ZpbGVz
LCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIH0KKyAg
ICAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpbnQgYXJndW1lbnRJ
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGluZGV4ID0gYXJndW1lbnRJbmRleCAt
IDE7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBtX3Zh
bHVlUHJvZmlsZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSB2YWx1ZVByb2ZpbGUoYXJndW1lbnRJbmRleCAtIDEp
OworICAgICAgICAgICAgaWYgKHJlc3VsdC0+Ynl0ZWNvZGVPZmZzZXQgIT0gLTEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CiAjZW5kaWYKIAogICAgICAgICB1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5mb0NvdW50KCkgY29u
c3QKQEAgLTUzNSw2ICs1NzIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEV2YWxDb2Rl
Q2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0
dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsgfQogCiAgICAgICAgIHZvaWQgc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY29weURhdGFGcm9tQWx0ZXJuYXRpdmUo
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90IG1fZXhlY3V0
ZUNvdW50ZXI7CiAKICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJl
cnMgcHJpdmF0ZS4KIApAQCAtNTk0LDYgKzY0NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2ZUluZm9zOwogICAgICAg
ICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFZlY3RvcjxN
ZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsKKyAgICAgICAgSklUQ29k
ZSBtX2ppdENvZGU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRo
QXJpdHlDaGVjazsKKyAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRp
ZgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFZh
bHVlUHJvZmlsZSwgOD4gbV92YWx1ZVByb2ZpbGVzOwpAQCAtNjEwLDYgKzY2NCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCisgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7IC8vIEZJWE1FIG1ha2UgdGhpcyBk
byBzb21ldGhpbmcKKwogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgcHVibGljOgpAQCAtNjQ2LDkgKzcwMiw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIC8vIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIGl0LgogCiAg
ICAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Ci0gICAgcHVibGlj
OgotICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFz
c1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9m
ZnNldCkKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgJm1fdW5zaGFyZWRT
eW1ib2xUYWJsZSwgZmFsc2UpCisgICAgcHJvdGVjdGVkOgorICAgICAgICBHbG9iYWxDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAm
bV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCkBAIC02NTgsMTYgKzcxNCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQotICAgICAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2VQcm92aWRlciwgMCkKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogR2xv
YmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291
cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAg
ICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAg
ICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisjZW5kaWYKICAgICB9Owog
CiAgICAgY2xhc3MgRXZhbENvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogICAg
IHB1YmxpYzoKLSAgICAgICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoKQotICAgICAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2VQcm92aWRlciwgMCkKKyAgICAgICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoLCBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVBy
b3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgICAgICwgbV9iYXNlU2NvcGVEZXB0aChi
YXNlU2NvcGVEZXB0aCkKICAgICAgICAgewogICAgICAgICB9CkBAIC02ODEsNiArNzQzLDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVzLmlzRW1wdHko
KSk7CiAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7CiAgICAgICAgIH0K
KyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1
YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
KTsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisjZW5kaWYKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2Jhc2VTY29wZURlcHRoOwpAQCAtNjkzLDE0ICs3
NjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gaW5pdGlh
bGlzZSB0aGUgQ29kZUJsb2NrIGJlZm9yZSB3ZSBjb3VsZCBpbml0aWFsaXNlIGFueSBSZWZQdHIg
dG8gaG9sZCB0aGUgc2hhcmVkCiAgICAgICAgIC8vIHN5bWJvbCB0YWJsZSwgc28gd2UganVzdCBw
YXNzIGFzIGEgcmF3IHBvaW50ZXIgd2l0aCBhIHJlZiBjb3VudCBvZiAxLiAgV2UgdGhlbiBtYW51
YWxseSBkZXJlZgogICAgICAgICAvLyBpbiB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlz
Q29uc3RydWN0b3IpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIFNoYXJl
ZFN5bWJvbFRhYmxlOjpjcmVhdGUoKS5sZWFrUmVmKCksIGlzQ29uc3RydWN0b3IpCisgICAgICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
Ym9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisg
ICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxP
YmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIFNoYXJlZFN5bWJvbFRhYmxlOjpj
cmVhdGUoKS5sZWFrUmVmKCksIGlzQ29uc3RydWN0b3IsIGFsdGVybmF0aXZlKQogICAgICAgICB7
CiAgICAgICAgIH0KICAgICAgICAgfkZ1bmN0aW9uQ29kZUJsb2NrKCkKICAgICAgICAgewogICAg
ICAgICAgICAgc2hhcmVkU3ltYm9sVGFibGUoKS0+ZGVyZWYoKTsKICAgICAgICAgfQorICAgICAg
ICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogICAgIH07CiAK
ICAgICBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiA5
NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gY291bnRzICogY2VydGFpbnR5IC8g
bnVtYmVyT2ZTYW1wbGVzOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgdW5zaWduZWQgbnVt
YmVyT2ZJbnQzMnMoKSBjb25zdAogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsK
QEAgLTE0Miw2ICsxNDIsODYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgewogICAgICAg
ICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9mQXJyYXlzKCksIG51bWJlck9mU2Ft
cGxlcygpKTsKICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91
dCkKKyAgICB7CisgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgICAgICJzYW1wbGVz
ID0gJXUsIGludDMyID0gJXUsIGRvdWJsZSA9ICV1LCBjZWxsID0gJXUsIGFycmF5ID0gJXUiLAor
ICAgICAgICAgICAgICAgIG51bWJlck9mU2FtcGxlcygpLAorICAgICAgICAgICAgICAgIG51bWJl
ck9mSW50MzJzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZEb3VibGVzKCksCisgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZDZWxscygpLAorICAgICAgICAgICAgICAgIG51bWJlck9mQXJyYXlz
KCkpOworICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoISFidWNr
ZXRzW2ldIHx8ICEhd2Vha0J1Y2tldHNbaV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICI6ICIpOworICAgICAgICAgICAg
ICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0pCisgICAgICAgICAgICAgICAgZnByaW50
ZihvdXQsICIlcyIsIEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKS5kZXNjcmlwdGlvbigpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCEhd2Vha0J1Y2tldHNbaV0pCisgICAgICAg
ICAgICAgICAgZnByaW50ZihvdXQsICJEZWFkQ2VsbCIpOworICAgICAgICB9CisgICAgfQorI2Vu
ZGlmCisgICAgCisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICB1bnNpZ25lZCBzYW1w
bGVzOworICAgICAgICB1bnNpZ25lZCBpbnQzMnM7CisgICAgICAgIHVuc2lnbmVkIGRvdWJsZXM7
CisgICAgICAgIHVuc2lnbmVkIGNlbGxzOworICAgICAgICB1bnNpZ25lZCBhcnJheXM7CisgICAg
fTsKKworICAgIC8vIE9wdGltaXplZCBtZXRob2QgZm9yIGdldHRpbmcgYWxsIGNvdW50cyBhdCBv
bmNlLgorICAgIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
c2FtcGxlcyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludDMycyAgPSAwOworICAgICAgICB1bnNp
Z25lZCBkb3VibGVzID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2VsbHMgICA9IDA7CisgICAgICAg
IHVuc2lnbmVkIGFycmF5cyAgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1Y2tl
dHNbaV0pIHsKKyAgICAgICAgICAgICAgICBXZWFrQnVja2V0IHdlYWtCdWNrZXQgPSB3ZWFrQnVj
a2V0c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHNhbXBsZXMrKzsKKyAgICAgICAgICAgICAgICAgICAgY2VsbHMrKzsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHdlYWtCdWNrZXQuZ2V0Q2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6
OnNfaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5cysrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2FtcGxlcysrOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNb
aV0pOworICAgICAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBp
bnQzMnMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAg
ICAgICAgICAgZG91YmxlcysrOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgICAgICAgICBjZWxscysrOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJy
YXkoJmdsb2JhbERhdGEsIHZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgYXJy
YXlzKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRp
c3RpY3Muc2FtcGxlcyA9IHNhbXBsZXM7CisgICAgICAgIHN0YXRpc3RpY3MuaW50MzJzICA9IGlu
dDMyczsKKyAgICAgICAgc3RhdGlzdGljcy5kb3VibGVzID0gZG91YmxlczsKKyAgICAgICAgc3Rh
dGlzdGljcy5jZWxscyAgID0gY2VsbHM7CisgICAgICAgIHN0YXRpc3RpY3MuYXJyYXlzICA9IGFy
cmF5czsKKyAgICB9CiAgICAgCiAgICAgaW50IGJ5dGVjb2RlT2Zmc2V0OyAvLyAtMSBmb3IgcHJv
bG9ndWUKICAgICBFbmNvZGVkSlNWYWx1ZSBidWNrZXRzW251bWJlck9mQnVja2V0c107CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkxLDcgKzE5MSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXNlcnZlTGFzdFZhcigK
ICAgICAgICAgbV9sYXN0VmFyID0gJm1fY2FsbGVlUmVnaXN0ZXJzLmxhc3QoKTsKIH0KIAotQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9k
ZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwg
UHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJs
b2NrLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0
RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBt
X3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0
c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkBAIC0yMjgsNiArMjI4
LDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIAogICAg
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPSAxOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Ig
InRoaXMiCiAgICAgY29kZUJsb2NrLT5tX251bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+bV9u
dW1WYXJzOworICAgIAorICAgIGlmIChjb21waWxhdGlvbktpbmQgPT0gT3B0aW1pemluZ0NvbXBp
bGF0aW9uKQorICAgICAgICByZXR1cm47CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LmdldCgpOwogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMjU4LDcgKzI2MSw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICB9CiB9CiAKLUJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJv
ZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUs
IENvZGVCbG9jayogY29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
bXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+
Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tz
KHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1f
c2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9y
dHNSaWNoU291cmNlSW5mbygpKQpAQCAtNDE5LDcgKzQyMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAgICB9CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5v
ZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUs
IEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91
bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAg
ICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5z
dXBwb3J0c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBzR2VuZXJhdGVkQ29kZSk7CiAgICAg
ICAgIHN0YXRpYyBib29sIGR1bXBzR2VuZXJhdGVkQ29kZSgpOwogCi0gICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFBy
b2dyYW1Db2RlQmxvY2sqKTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5
Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKLSAgICAg
ICAgQnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRh
YmxlKiwgRXZhbENvZGVCbG9jayopOworICAgICAgICBlbnVtIENvbXBpbGF0aW9uS2luZCB7IEZp
cnN0Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21waWxhdGlvbiB9OworICAgICAgICAKKyAgICAg
ICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJv
bFRhYmxlKiwgUHJvZ3JhbUNvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5
dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJv
bFRhYmxlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IoRXZhbE5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgRXZhbENv
ZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAgICAgICAgIGNvbnN0IENv
bW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFs
RGF0YS0+cHJvcGVydHlOYW1lczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDkgKzQ5LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFRoaXMg
Y2xhc3MgaXMgdXNlZCB0byBjb21waWxlIHRoZSBkYXRhZmxvdyBncmFwaCBmcm9tIGEgQ29kZUJs
b2NrLgogY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogcHVibGljOgotICAgIEJ5dGVDb2RlUGFyc2Vy
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdyYXBoJiBn
cmFwaCkKKyAgICBCeXRlQ29kZVBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEdyYXBoJiBncmFwaCkK
ICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCiAg
ICAgICAgICwgbV9ncmFwaChncmFwaCkKICAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQogICAg
ICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2UpCkBAIC02NSw2ICs2Niw5IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAgICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdz
KDApCiAgICAgeworI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKyAgICAgICAgQVNT
RVJUKG1fcHJvZmlsZWRCbG9jayk7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBQYXJzZSBhIGZ1
bGwgQ29kZUJsb2NrIG9mIGJ5dGVjb2RlLgpAQCAtMTAyLDkgKzEwNiw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgcmV0dXJuIGdldExvY2FsKCh1bnNp
Z25lZClvcGVyYW5kKTsKICAgICB9Ci0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRl
eCB2YWx1ZSwgUHJlZGljdGVkVHlwZSBzdGF0aWNQcmVkaWN0aW9uID0gUHJlZGljdE5vbmUpCisg
ICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSwgUHJlZGljdGVkVHlwZSB3
ZWFrUHJlZGljdGlvbiA9IFByZWRpY3ROb25lKQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5wcmVk
aWN0KG9wZXJhbmQsIHN0YXRpY1ByZWRpY3Rpb24sIFN0YXRpY1ByZWRpY3Rpb24pOworICAgICAg
ICBtX2dyYXBoLnByZWRpY3Qob3BlcmFuZCwgd2Vha1ByZWRpY3Rpb24sIFdlYWtQcmVkaWN0aW9u
KTsKIAogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTQyMSwxOSArNDI1LDIxIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CiAgICAgICAgIE5vZGVJbmRl
eCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhQ
cmVkaWN0Tm9uZSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICBpZiAoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KQorICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dElu
c3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAg
ICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgICAgIHN0
cm9uZ2x5UHJlZGljdChjYWxsLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCkpOworICAgICAgICB9CiAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAg
ICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IGFyZ0NvdW50OwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAKLSAgICB2b2lkIHN0YXRp
Y2FsbHlQcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHdlYWtseVBy
ZWRpY3RBcnJheShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5w
cmVkaWN0KG1fZ3JhcGhbbm9kZUluZGV4XSwgUHJlZGljdEFycmF5LCBTdGF0aWNQcmVkaWN0aW9u
KTsKKyAgICAgICAgbV9ncmFwaC5wcmVkaWN0KG1fZ3JhcGhbbm9kZUluZGV4XSwgUHJlZGljdEFy
cmF5LCBXZWFrUHJlZGljdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCB3ZWFrbHlQcmVkaWN0SW50MzIo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3JldXNhYmxlTm9k
ZVN0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgIG1fcmV1c2FibGVOb2RlU3RhY2suYXBwZW5kKCZt
X2dyYXBoW25vZGVJbmRleF0pOwpAQCAtNDU3LDE0ICs0NjMsMzcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBtX3JldXNhYmxlTm9kZVN0YWNrLmFwcGVuZCgmbV9ncmFwaFtub2RlUHRyLT5j
aGlsZDIoKV0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLnByZWRpY3QoKm5vZGVQdHIsIFByZWRpY3RJbnQzMiwg
U3RhdGljUHJlZGljdGlvbik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5wcmVkaWN0KCpub2Rl
UHRyLCBQcmVkaWN0SW50MzIsIFdlYWtQcmVkaWN0aW9uKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoIW1fcmV1c2FibGVOb2RlU3RhY2su
aXNFbXB0eSgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBzdHJvbmdseVByZWRpY3QoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICB7CisjaWYgRU5BQkxF
KERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBt
X3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBBU1NFUlQocHJvZmlsZSk7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAg
ICAgICAgcHJpbnRmKCJEeW5hbWljIHByZWRpY3Rpb24gWyV1LCAldV06ICIsIG5vZGVJbmRleCwg
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAgICAg
cHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0
KG1ha2VQcmVkaWN0aW9uKCptX2dsb2JhbERhdGEsICpwcm9maWxlKSwgU3Ryb25nUHJlZGljdGlv
bik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQg
c3Ryb25nbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBzdHJv
bmdseVByZWRpY3Qobm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCk7CisgICAgfQogCiAgICAgSlNH
bG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAg
ICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKIAogICAg
IC8vIFRoZSBjdXJyZW50IGJsb2NrIGJlaW5nIGdlbmVyYXRlZC4KQEAgLTU2Myw3ICs1OTIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOwogICAgICAgICAgICAgcmV0
dXJuICFtX3BhcnNlRmFpbGVkOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFN3
aXRjaCBvbiB0aGUgY3VycmVudCBieXRlY29kZSBvcGNvZGUuCiAgICAgICAgIEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fY3VycmVudEluZGV4
OwogICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKSkgewpAQCAtNTg3LDggKzYxNiw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKICAgICAg
ICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMSk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7Cisg
ICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHdlYWtseVBy
ZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0QW5kLCBvcDEsIG9wMiksIFByZWRpY3RJbnQzMik7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRhbmQpOwogICAgICAgICB9CkBAIC01OTYsOCAr
NjI1LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICBjYXNlIG9wX2JpdG9yOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQz
MihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAgICAgc3RhdGlj
YWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9w
MSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdE9yLCBvcDEs
IG9wMiksIFByZWRpY3RJbnQzMik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRvcik7
CiAgICAgICAgIH0KQEAgLTYwNSw4ICs2MzQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7CiAgICAgICAgICAgICBO
b2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihv
cDEpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAg
ICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50
MzIob3AyKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKEJpdFhvciwgb3AxLCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfYml0eG9yKTsKICAgICAgICAgfQpAQCAtNjE0LDggKzY0Myw4IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBv
cF9yc2hpZnQ6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9
IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJl
ZGljdEludDMyKG9wMik7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AxKTsKKyAg
ICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgTm9kZUluZGV4
IHJlc3VsdDsKICAgICAgICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkgemVyby4KICAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG9wMikgJiAweDFmKSkKQEAgLTYyOSw4ICs2NTgsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJ
bnQzMihvcDEpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAg
ICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVk
aWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAgICAgICAgICAg
ICAvLyBPcHRpbWl6ZSBvdXQgc2hpZnRzIGJ5IHplcm8uCiAgICAgICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG9wMikgJiYgISh2YWx1ZU9mSW50MzJDb25zdGFudChvcDIpICYgMHgxZikpCkBA
IC02NDQsOCArNjczLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICBjYXNlIG9wX3Vyc2hpZnQ6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEg
PSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAg
ICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICB3ZWFrbHlQcmVk
aWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDIpOwogICAg
ICAgICAgICAgTm9kZUluZGV4IHJlc3VsdDsKICAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgb2Yg
YSB6ZXJvLWV4dGVuZGluZyByaWdodCBzaGlmdCBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIHZh
bHVlLgogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0b3AgYml0IGlzIHNl
dCwgdGhlIHJlc3VsdCBpcyBub3QgaW4gdGhlIGludDMyIHJhbmdlLApAQCAtNjc1LDcgKzcwNCw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2Fz
ZSBvcF9wcmVfaW5jOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0VG9O
dW1iZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3ApOwor
ICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsKICAgICAgICAgICAgIHNldChzcmNE
c3QsIGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHJlX2luYyk7CiAgICAgICAgIH0KQEAgLTY4NCw3ICs3MTMsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5z
aWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7Ci0gICAgICAgICAgICBzdGF0
aWNhbGx5UHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihv
cCk7CiAgICAgICAgICAgICBzZXQocmVzdWx0LCBvcCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0
LCBhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3Bvc3RfaW5jKTsKQEAgLTY5Myw3ICs3MjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogewogICAgICAg
ICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7Ci0gICAgICAg
ICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRp
Y3RJbnQzMihvcCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoU3Vi
LCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9kZWMpOwogICAg
ICAgICB9CkBAIC03MDIsNyArNzMxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRU
b051bWJlcihzcmNEc3QpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcCk7
CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwogICAgICAgICAgICAgc2V0KHJl
c3VsdCwgb3ApOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0aFN1Yiwg
b3AsIG9uZSgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2RlYyk7CkBAIC03
MTcsOCArNzQ2LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgLy8gSWYgYm90aCBvcGVyYW5kcyBjYW4gc3RhdGljYWxseSBiZSBkZXRlcm1p
bmVkIHRvIHRoZSBudW1iZXJzLCB0aGVuIHRoaXMgaXMgYW4gYXJpdGhtZXRpYyBhZGQuCiAgICAg
ICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG11c3QgYXNzdW1lIHRoaXMgbWF5IGJlIHBlcmZvcm1p
bmcgYSBjb25jYXRlbmF0aW9uIHRvIGEgc3RyaW5nLgogICAgICAgICAgICAgaWYgKGlzU21hbGxJ
bnQzMkNvbnN0YW50KG9wMSkgfHwgaXNTbWFsbEludDMyQ29uc3RhbnQob3AyKSkgewotICAgICAg
ICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgICAgICBz
dGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICAgICAgd2Vha2x5UHJlZGlj
dEludDMyKG9wMSk7CisgICAgICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtvcDFdLmhhc051bWVyaWNSZXN1
bHQoKSAmJiBtX2dyYXBoW29wMl0uaGFzTnVtZXJpY1Jlc3VsdCgpKQogICAgICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoQWRk
LCB0b051bWJlcihvcDEpLCB0b051bWJlcihvcDIpKSk7CkBAIC03MzIsOCArNzYxLDggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMSA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKGlzU21hbGxJbnQzMkNvbnN0YW50KG9w
MSkgfHwgaXNTbWFsbEludDMyQ29uc3RhbnQob3AyKSkgewotICAgICAgICAgICAgICAgIHN0YXRp
Y2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMik7CisgICAgICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7Cisg
ICAgICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChBcml0aFN1Yiwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3N1Yik7
CkBAIC04NzgsMTEgKzkwNywxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogewogICAgICAgICAgICAgTm9kZUlu
ZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEFycmF5KGJhc2UpOwotICAgICAg
ICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CisgICAgICAgICAgICB3ZWFr
bHlQcmVkaWN0QXJyYXkoYmFzZSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIocHJv
cGVydHkpOwogCiAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlWYWwgPSBhZGRUb0dyYXBoKEdl
dEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UsIHByb3BlcnR5LCBh
bGlhc2VzLmxvb2t1cEdldEJ5VmFsKGJhc2UsIHByb3BlcnR5KSk7CiAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOworICAgICAgICAgICAg
c3Ryb25nbHlQcmVkaWN0KGdldEJ5VmFsKTsKICAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0
QnlWYWwoZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfdmFs
KTsKQEAgLTg5Miw4ICs5MjIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCB2
YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IHN0YXRpY2FsbHlQcmVkaWN0QXJyYXkoYmFzZSk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJl
ZGljdEludDMyKHByb3BlcnR5KTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShiYXNl
KTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKICAgICAgICAg
ICAgIE5vZGVJbmRleCBhbGlhc2VkR2V0ID0gYWxpYXNlcy5sb29rdXBHZXRCeVZhbChiYXNlLCBw
cm9wZXJ0eSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlWYWwgPSBhZGRUb0dyYXBoKGFs
aWFzZWRHZXQgIT0gTm9Ob2RlID8gUHV0QnlWYWxBbGlhcyA6IFB1dEJ5VmFsLCBiYXNlLCBwcm9w
ZXJ0eSwgdmFsdWUpOwpAQCAtOTEyLDYgKzk0Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdl
dE1ldGhvZCA9IGFkZFRvR3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5m
byhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgZ2V0TWV0aG9kKTsKKyAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRN
ZXRob2QpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdU
SChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwpAQCAtOTI1
LDYgKzk1Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7
CisgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7CiAgICAgICAgICAgICBhbGlh
c2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9ieV9pZCk7CkBAIC0xMzUwLDcgKzEzODIsNyBAQCBib29sIHBhcnNlKEdyYXBoJiBncmFw
aCwgSlNHbG9iYWxEYXRhKiBnCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAgICAgcmV0
dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLCBncmFwaCkucGFyc2UoKTsKKyAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIGdyYXBoKS5wYXJz
ZSgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0RyaXZlci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCeXRl
Q29kZVBhcnNlci5oIgorI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZH
UHJvcGFnYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0g
Q29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OworaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCit7Cisg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBH
cmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJz
KTsKKyAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rp
b24pCisgICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcyhjYWxsZWVBcmdzRXhlYywgY29k
ZUJsb2NrKTsKKyAgICAKKyAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2sp
OworICAgIAorICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29k
ZUJsb2NrKTsKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CisgICAg
ICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0
YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKGppdENvZGUsICpqaXRDb2RlV2l0aEFyaXR5Q2hlY2sp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjb21waWxlTW9kZSA9PSBDb21waWxlT3Ro
ZXIpOworICAgICAgICBBU1NFUlQoIWppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIAor
ICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlKGppdENvZGUpOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUpCit7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGls
ZU90aGVyLCBleGVjLCAwLCBjb2RlQmxvY2ssIGppdENvZGUsIDApOworfQorCitib29sIHRyeUNv
bXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK3sKKyAgICByZXR1cm4gY29tcGlsZShDb21w
aWxlRnVuY3Rpb24sIGV4ZWMsIGNhbGxlZUFyZ3NFeGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0RyaXZlcl9oCisjZGVm
aW5lIERGR0RyaXZlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVENv
ZGU7CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CisKK25hbWVzcGFjZSBERkcgeworCisj
aWYgRU5BQkxFKERGR19KSVQpCitib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2Nr
KiwgSklUQ29kZSYpOworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0
YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyNlbHNlCitpbmxpbmUgYm9vbCB0cnlD
b21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxzZTsg
fQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSos
IENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJldHVybiBm
YWxzZTsgfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NDUz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsNiArMTIxLDEwIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJ
bmRleCwgQ28KICAgICB9CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKICAgICAgICAgcHJp
bnRmKCIlcyQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuY29uc3RhbnROdW1iZXIo
KSk7CisgICAgICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jayk7CisgICAgICAgICAgICBwcmludGYo
IiA9ICVzIiwgdmFsdWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNK
dW1wKCkpIHsKQEAgLTE4NiwxNyArMTkwLDQ3IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5v
ZGVJbmRleCBvcCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVz
KEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc2l6ZV90IG51bWJlck9m
QXJndW1lbnRzID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwg
bV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBhcmcgPSAx
OyBhcmcgPCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpIHsKLSAgICAgICAgSlNWYWx1ZSBhcmd1
bWVudFZhbHVlID0gZXhlYy0+YXJndW1lbnQoYXJnIC0gMSk7Ci0gICAgICAgIGlmIChhcmd1bWVu
dFZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmdd
Lm1fdmFsdWUgfD0gUHJlZGljdEludDMyOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVudFZhbHVl
LmlzRG91YmxlKCkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3Zh
bHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgaWYgKGV4ZWMpIHsKKyAgICAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSwgbV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZyAtIDEp
OworICAgICAgICAgICAgaWYgKGFyZ3VtZW50VmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAg
ICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJlZGljdEludDMyOwor
ICAgICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJlZGljdERvdWJs
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJ
T04pCisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUpOworCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID49IDEpOwor
ICAgIGZvciAoc2l6ZV90IGFyZyA9IDE7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5tX251bVBhcmFtZXRlcnMpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHBy
b2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsK
KyAgICAgICAgaWYgKCFwcm9maWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
I2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiQXJndW1lbnQgcHJvZmlsZSBb
JWx1XTogIiwgYXJnKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRvdXQpOworICAgICAgICBw
cmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1lcmdlUHJlZGljdGlvbiht
X2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihnbG9iYWxE
YXRhLCAqcHJvZmlsZSkpOworICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAg
ICBwcmludGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fYXJn
dW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUpKTsKKyNlbmRpZgogICAgIH0KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CisjZW5kaWYKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDggKzI4LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5j
bHVkZSA8UmVnaXN0ZXJGaWxlLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR05vZGUuaD4KKyNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJG
aWxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMTM1LDEyICsxMzYsMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gKm1fYmxvY2tzW2Jsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZUJlZ2luKV07CiAgICAgfQogCi0gICAgdm9pZCBwcmVkaWN0KGludCBvcGVyYW5k
LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAg
IGJvb2wgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVk
aWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsg
bV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGljdGlv
bnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlv
bihtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
KHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZVByZWRpY3Rpb25zLnNpemUoKSkgewpAQCAt
MTQ4LDM3ICsxNDgsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgbV92YXJpYWJsZVByZWRpY3Rp
b25zLnJlc2l6ZShvcGVyYW5kICsgMSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1l
cmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlUHJlZGljdGlvbnNbb3BlcmFuZF0ubV92YWx1ZSwgbWFr
ZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgIHJldHVybiBtZXJnZVBy
ZWRpY3Rpb24obV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVk
aWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRp
Y3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24s
IFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNp
Z25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJj
ZSBzb3VyY2UpCiAgICAgewogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xv
dD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmZpbmQodmFyTnVtYmVy
ICsgMSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZW5kKCkp
IHsKICAgICAgICAgICAgIFByZWRpY3Rpb25TbG90IHByZWRpY3Rpb25TbG90OwotICAgICAgICAg
ICAgbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVBy
ZWRpY3Rpb24ocHJlZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlv
biwgc291cmNlKSk7CiAgICAgICAgICAgICBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmFkZCh2YXJO
dW1iZXIgKyAxLCBwcmVkaWN0aW9uU2xvdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQu
bV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgICAg
ICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0
KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBz
b3VyY2UpCisgICAgYm9vbCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5v
ZGUub3ApIHsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHByZWRpY3Qobm9k
ZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIHByZWRp
Y3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgcHJlZGljdEdsb2JhbFZh
cihub2RlLnZhck51bWJlcigpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigp
LCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNh
c2UgR2V0TWV0aG9kOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIENhbGw6
CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgbm9kZS5wcmVkaWN0KHByZWRp
Y3Rpb24sIHNvdXJjZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rp
b24sIHNvdXJjZSk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI2LDEyICsyMjYs
NDMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwogICAgICAgICB9
CiAgICAgfQorICAgIAorICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBj
b25zdGFudHMuCisgICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgfQorICAg
IGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYXQobm9kZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgfQorICAgIGJvb2wgaXNJbnQz
MkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9j
ayk7CisgICAgfQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5k
ZXgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgLy8gSGVscGVyIG1l
dGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgorICAgIEpTVmFsdWUgdmFsdWVP
ZkpTQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2spOworICAgIH0KKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KENvZGVCbG9j
ayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF0KG5vZGVJbmRleCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9Cisg
ICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZh
bHVlT2ZEb3VibGVDb25zdGFudChjb2RlQmxvY2spOworICAgIH0KIAogI2lmbmRlZiBOREVCVUcK
ICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICNlbmRpZgogCi0gICAg
dm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHByZWRpY3RB
cmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwogCiAgICAgVmVjdG9yPCBPd25Q
dHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4g
bV92YXJBcmdDaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTMsNiArOTEzLDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5m
by5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9pc0NhbGw7CisgICAgICAgIGluZm8uaXNERkcgPSB0
cnVlOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVs
KGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCkpOwogICAgICAg
ICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0u
bV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDUzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjA3LDM5ICsyMDcsMTQgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEhlbHBl
ciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtu
b2RlSW5kZXhdLmlzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBncmFwaCgpW25vZGVJbmRl
eF0uaXNDb25zdGFudCgpOwotICAgIH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5k
ZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpOwotICAgIH0KLSAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpLmlzTnVtYmVyKCk7Ci0gICAgfQorICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQor
ICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBo
KCkuaXNKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSW50MzJDb25zdGFudChjb2Rl
QmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2Nr
KCksIG5vZGVJbmRleCk7IH0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFs
dWVzIGZyb20gbm9kZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgp
KTsKLSAgICAgICAgdW5zaWduZWQgY29uc3RhbnRJbmRleCA9IGdyYXBoKClbbm9kZUluZGV4XS5j
b25zdGFudE51bWJlcigpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNvbnN0YW50UmVn
aXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4KS5nZXQoKTsK
LSAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOwot
ICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkudW5jaGVja2VkR2V0
TnVtYmVyKCk7Ci0gICAgfQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2so
KSwgbm9kZUluZGV4KTsgfQorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChjb2Rl
QmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mRG91YmxlQ29uc3Rh
bnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgSklU
IGdlbmVyYXRlIGR5bmFtaWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgog
I2lmIERGR19KSVRfQVNTRVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
VmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xOTUsMTQgKzE5OCwxNSBAQCBzdGF0aWMgY29uc3QgUHJl
ZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgCiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0SW50MzIgID0gMHgwNDsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3REb3Vi
bGUgPSAweDA4Owogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE51bWJlciA9IDB4
MGM7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBEeW5hbWljUHJlZGljdGlvblRhZyA9IDB4
ODA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgID0gMHgwZjsKK3N0
YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rpb25UYWcgPSAweDgwOwogc3Rh
dGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwOwogCi1l
bnVtIFByZWRpY3Rpb25Tb3VyY2UgeyBTdGF0aWNQcmVkaWN0aW9uLCBEeW5hbWljUHJlZGljdGlv
biB9OworZW51bSBQcmVkaWN0aW9uU291cmNlIHsgV2Vha1ByZWRpY3Rpb24sIFN0cm9uZ1ByZWRp
Y3Rpb24gfTsKIAogaW5saW5lIGJvb2wgaXNDZWxsUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZh
bHVlKQogewotICAgIHJldHVybiAodmFsdWUgJiBQcmVkaWN0Q2VsbCkgPT0gUHJlZGljdENlbGwg
JiYgISh2YWx1ZSAmIH5QcmVkaWN0QXJyYXkpOworICAgIHJldHVybiAodmFsdWUgJiBQcmVkaWN0
Q2VsbCkgPT0gUHJlZGljdENlbGwgJiYgISh2YWx1ZSAmIH4oUHJlZGljdEFycmF5IHwgUHJlZGlj
dGlvblRhZ01hc2spKTsKIH0KIAogaW5saW5lIGJvb2wgaXNBcnJheVByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSB2YWx1ZSkKQEAgLTIyMiw2MCArMjI2LDEwNyBAQCBpbmxpbmUgYm9vbCBpc0RvdWJs
ZVByZWRpY3Rpb24oUHJlZGljdGVkCiAKIGlubGluZSBib29sIGlzTnVtYmVyUHJlZGljdGlvbihQ
cmVkaWN0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1i
ZXIpICYmICEodmFsdWUgJiB+UHJlZGljdE51bWJlcik7CisgICAgcmV0dXJuICEhKHZhbHVlICYg
UHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25U
YWdNYXNrKSk7CiB9CiAKLWlubGluZSBib29sIGlzRHluYW1pY1ByZWRpY3Rpb24oUHJlZGljdGVk
VHlwZSB2YWx1ZSkKK2lubGluZSBib29sIGlzU3Ryb25nUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSAhPSAoUHJlZGljdE5vbmUgfCBEeW5hbWljUHJl
ZGljdGlvblRhZykpOwotICAgIHJldHVybiAhISh2YWx1ZSAmIER5bmFtaWNQcmVkaWN0aW9uVGFn
KTsKKyAgICBBU1NFUlQodmFsdWUgIT0gKFByZWRpY3ROb25lIHwgU3Ryb25nUHJlZGljdGlvblRh
ZykpOworICAgIHJldHVybiAhISh2YWx1ZSAmIFN0cm9uZ1ByZWRpY3Rpb25UYWcpOwogfQogCisj
aWZuZGVmIE5ERUJVRworaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVk
aWN0ZWRUeXBlIHZhbHVlKQoreworICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24odmFsdWUpKSB7
CisgICAgICAgIHN3aXRjaCAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spIHsKKyAgICAgICAg
Y2FzZSBQcmVkaWN0Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYm90dG9tIjsK
KyAgICAgICAgY2FzZSBQcmVkaWN0Q2VsbDoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmct
Y2VsbCI7CisgICAgICAgIGNhc2UgUHJlZGljdEFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy1hcnJheSI7CisgICAgICAgIGNhc2UgUHJlZGljdEludDMyOgorICAgICAgICAgICAg
cmV0dXJuICJwLXN0cm9uZy1pbnQzMiI7CisgICAgICAgIGNhc2UgUHJlZGljdE51bWJlcjoKKyAg
ICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiAicC1zdHJvbmctdG9wIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBz
d2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSBQcmVkaWN0Tm9uZToKKyAgICAgICAgcmV0dXJuICJw
LXdlYWstYm90dG9tIjsKKyAgICBjYXNlIFByZWRpY3RDZWxsOgorICAgICAgICByZXR1cm4gInAt
d2Vhay1jZWxsIjsKKyAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgcmV0dXJuICJwLXdl
YWstYXJyYXkiOworICAgIGNhc2UgUHJlZGljdEludDMyOgorICAgICAgICByZXR1cm4gInAtd2Vh
ay1pbnQzMiI7CisgICAgY2FzZSBQcmVkaWN0TnVtYmVyOgorICAgICAgICByZXR1cm4gInAtd2Vh
ay1udW1iZXIiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAicC13ZWFrLXRvcCI7Cisg
ICAgfQorfQorI2VuZGlmCisKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1lcmdlUHJlZGljdGlvbnMo
UHJlZGljdGVkVHlwZSBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGlmIChpc0R5
bmFtaWNQcmVkaWN0aW9uKGxlZnQpID09IGlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQpKQorICAg
IGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgPT0gaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0
KSkKICAgICAgICAgcmV0dXJuIGxlZnQgfCByaWdodDsKLSAgICBpZiAoaXNEeW5hbWljUHJlZGlj
dGlvbihsZWZ0KSkgewotICAgICAgICBBU1NFUlQoIWlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQp
KTsKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKSB7CisgICAgICAgIEFTU0VSVCgh
aXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSk7CiAgICAgICAgIHJldHVybiBsZWZ0OwogICAgIH0K
LSAgICBBU1NFUlQoIWlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkpOwotICAgIEFTU0VSVChpc0R5
bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgQVNTRVJUKCFpc1N0cm9uZ1ByZWRpY3Rpb24o
bGVmdCkpOworICAgIEFTU0VSVChpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKICAgICByZXR1
cm4gcmlnaHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBtZXJnZVBy
ZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKK2lubGluZSBib29sIG1lcmdl
UHJlZGljdGlvbihUJiBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGxlZnQgPSBz
dGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+
KGxlZnQpLCByaWdodCkpOworICAgIFByZWRpY3RlZFR5cGUgbmV3UHJlZGljdGlvbiA9IHN0YXRp
Y19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMoc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obGVm
dCksIHJpZ2h0KSk7CisgICAgYm9vbCByZXN1bHQgPSBuZXdQcmVkaWN0aW9uICE9IHN0YXRpY19j
YXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpOworICAgIGxlZnQgPSBuZXdQcmVkaWN0aW9uOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiB7Ci0gICAgQVNT
RVJUKCEodHlwZSAmIER5bmFtaWNQcmVkaWN0aW9uVGFnKSk7Ci0gICAgQVNTRVJUKHNvdXJjZSA9
PSBEeW5hbWljUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gU3RhdGljUHJlZGljdGlvbik7CisgICAg
QVNTRVJUKCEodHlwZSAmIFN0cm9uZ1ByZWRpY3Rpb25UYWcpKTsKKyAgICBBU1NFUlQoc291cmNl
ID09IFN0cm9uZ1ByZWRpY3Rpb24gfHwgc291cmNlID09IFdlYWtQcmVkaWN0aW9uKTsKICAgICBp
ZiAodHlwZSA9PSBQcmVkaWN0Tm9uZSkKICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAg
IHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlvbiA/IER5bmFtaWNQcmVk
aWN0aW9uVGFnIDogMCk7CisgICAgcmV0dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRp
Y3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9uVGFnIDogMCk7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1p
bmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUp
CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQoraW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVBy
ZWRpY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWYWx1ZVByb2ZpbGUmIHBy
b2ZpbGUpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0g
ICAgICAgIHJldHVybiAicC1ib3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAg
IHJldHVybiAicC1jZWxsIjsKLSAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgcmV0dXJu
ICJwLWFycmF5IjsKLSAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJwLWlu
dDMyIjsKLSAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC1udW1iZXIi
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC10b3AiOwotICAgIH0KKyAgICBWYWx1
ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3RhdGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0
aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRpc3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGlj
cy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0
YXRpc3RpY3MuaW50MzJzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0
cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0SW50MzI7CisgICAgCisgICAgaWYgKHN0YXRpc3Rp
Y3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdERvdWJsZTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5p
bnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAg
ICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisgICAg
aWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0
dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0QXJyYXk7CisgICAgCisgICAgaWYgKHN0
YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ry
b25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RDZWxsOworICAgIAorICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdFRvcDsKIH0KICNlbmRpZgogCkBAIC0zNTYsNiArNDA3LDMz
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7CiAgICAgICAg
IHJldHVybiBtX29wSW5mbzsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBjb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFu
dE51bWJlcigpKS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNJbnQzMigpOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgewor
ICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aykuaXNOdW1iZXIoKTsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludDMy
Q29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2spLmFzSW50MzIoKTsKKyAgICB9CisKKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNv
bnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRG91
YmxlQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIH0KIAogICAgIGJvb2wgaGFz
TG9jYWwoKQogICAgIHsKQEAgLTQ3MCwyNCArNTQ4LDI3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KG1fb3BJbmZvMik7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rp
b25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1By
ZWRpY3Rpb24oKSk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIHByZXZpb3VzbHkgZm91
bmQgZW1waXJpY2FsbHkgdGhhdCBhc2NyaWJpbmcgc3RhdGljIHByZWRpY3Rpb25zCiAgICAgICAg
IC8vIHRvIGhlYXAgbG9hZHMgYXMgd2VsbCBhcyBjYWxscyBpcyBub3QgcHJvZml0YWJsZSwgYXMg
dGhlc2UgcHJlZGljdGlvbnMKICAgICAgICAgLy8gYXJlIHdyb25nIHRvbyBvZnRlbi4gSGVuY2Us
IHRoaXMgY29tcGxldGVseSBpZ25vcmVzIHN0YXRpYyBwcmVkaWN0aW9ucy4KLSAgICAgICAgaWYg
KHNvdXJjZSA9PSBTdGF0aWNQcmVkaWN0aW9uKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoc291cmNlID09IFdlYWtQcmVkaWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAg
ICAgICBBU1NFUlQoc291cmNlID09IER5bmFtaWNQcmVkaWN0aW9uKTsKKyAgICAgICAgQVNTRVJU
KHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uKTsKICAgICAgICAgCi0gICAgICAgIG1fb3BJbmZv
MiB8PSBEeW5hbWljUHJlZGljdGlvblRhZyB8IHByZWRpY3Rpb247CisgICAgICAgIFByZWRpY3Rl
ZFR5cGUgbmV3UHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOwor
ICAgICAgICBib29sIHJlc3VsdCA9IG1fb3BJbmZvMiAhPSBuZXdQcmVkaWN0aW9uOworICAgICAg
ICBtX29wSW5mbzIgfD0gbmV3UHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9Ci0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRvci5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpICYmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUHJv
cGFnYXRvciB7CitwdWJsaWM6CisgICAgUHJvcGFnYXRvcihHcmFwaCYgZ3JhcGgsIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaykKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fZ2xvYmFsRGF0
YShnbG9iYWxEYXRhKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAg
LCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICB7CisgICAgICAgIG1fcHJlZGlj
dGlvbnMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaSA9
IDA7IGkgPCBtX2dyYXBoLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9wcmVkaWN0aW9uc1tp
XSA9IFByZWRpY3ROb25lOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeHBvaW50KCkKKyAgICB7
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9w
dGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCisgICAgICAgICAgICAvLyBE
RlMtc29ydGVkIGNvZGUuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBCYWNrd2Fy
ZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNv
ZGUgd2lsbAorICAgICAgICAgICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5
IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBmbG93LgorICAgICAgICAgICAgLy8gVGhp
cyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQg
Zml4cG9pbnQKKyAgICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBz
aG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOworICAgICAgICAgICAgaWYgKCFt
X2NoYW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIERvIGFub3RoZXIgZm9yd2FyZCBwYXNzIGJlY2F1c2UgZm9yd2FyZCBwYXNzZXMgYXJl
IG9uIGF2ZXJhZ2UgbW9yZQorICAgICAgICAgICAgLy8gcHJvZml0YWJsZS4KKyAgICAgICAgICAg
IG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAg
ICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9p
ZCBzZXRQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAg
IGlmIChtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSA9PSBwcmVkaWN0aW9uKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJ
bmRleF0gPSBwcmVkaWN0aW9uOworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG1lcmdlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisg
ICAgeworICAgICAgICBpZiAoREZHOjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2Nv
bXBpbGVJbmRleF0sIHByZWRpY3Rpb24pKQorICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVOb2RlKE5vZGUmIG5vZGUpCisgICAgewor
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKKyAgICAgICAgc3dpdGNo
IChvcCkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtl
UHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlv
bihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXko
Jm1fZ2xvYmFsRGF0YSwgY2VsbCkpCisgICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdEFycmF5LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3RDZWxsLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RU
b3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7
CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAg
ICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRp
Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRY
b3I6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAg
ICAgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAg
ICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAgICAg
ICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRpY3Rpb24pKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3ROdW1iZXIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1
ZUFkZDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tu
b2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRp
Y3Rpb25zW25vZGUuY2hpbGQyKCldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNT
dHJvbmdQcmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJl
ZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0
aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9u
Z1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1
YjoKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBs
ZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJl
ZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24o
bWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAgICAgICAgICAgICBtZXJn
ZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNz
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZVN0
cmljdEVxOgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgc2FkLCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVkaWN0aW9uLCBldmVuIHRob3Vn
aCB3ZSBlYXNpbHkKKyAgICAgICAgICAgIC8vIGNvdWxkLgorICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0
QnlJZDoKKyAgICAgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAg
IGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpKQorICAgICAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnZlcnRUaGlz
OiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RDZWxs
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEdsb2JhbFZhclByZWRpY3Rpb24obm9k
ZS52YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRp
Y3Rpb24pKQorICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3RH
bG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSAm
IH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBU
aGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgorICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAg
IGNhc2UgREZHOjpKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1
cm46CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogor
ICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CisgICAgICAgIGNhc2UgUGhpOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQg
YmVjYXVzZSB3ZSBkb24ndCBoYXZlIHByb2ZpbGluZyBmb3IgdGhlbSwgeWV0LgorICAgICAgICBj
YXNlIFJlc29sdmU6CisgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2U6CisgICAgICAgIGNhc2UgUmVz
b2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlRm9yd2Fy
ZCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiUHJvcGFn
YXRpbmcgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIGZvciAo
bV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21f
Y29tcGlsZUluZGV4KQorICAgICAgICAgICAgcHJvcGFnYXRlTm9kZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQorICAg
IHsKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIlByb3BhZ2F0aW5nIGJh
Y2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBpbGVJbmRleC0tID4gMDspCisgICAgICAg
ICAgICBwcm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICB9CisgICAg
CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7Cisg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9j
azsKKyAgICAKKyAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CisgICAgCisgICAgVmVjdG9y
PFByZWRpY3RlZFR5cGUsIDE2PiBtX3ByZWRpY3Rpb25zOworCisjaWYgREZHX0RFQlVHX1ZFUkJP
U0UKKyAgICB1bnNpZ25lZCBtX2NvdW50OworI2VuZGlmCisgICAgCisgICAgYm9vbCBtX2NoYW5n
ZWQ7Cit9OworCit2b2lkIHByb3BhZ2F0ZShHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
OworICAgIEFTU0VSVChwcm9maWxlZEJsb2NrKTsKKyAgICAKKyAgICBQcm9wYWdhdG9yIHByb3Bh
Z2F0b3IoZ3JhcGgsICpnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIHByb2ZpbGVkQmxvY2spOworICAg
IHByb3BhZ2F0b3IuZml4cG9pbnQoKTsKKyAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAg
IGdyYXBoLmR1bXAoY29kZUJsb2NrKTsKKyNlbmRpZgorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkgJiYgRU5BQkxFKERZTkFNSUNfT1BU
SU1JWkFUSU9OKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGFnYXRvcl9oCisjZGVm
aW5lIERGR1Byb3BhZ2F0b3JfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDxk
ZmcvREZHR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2Ns
YXNzIEpTR2xvYmFsRGF0YTsKKworbmFtZXNwYWNlIERGRyB7CisKKy8vIFByb3BhZ2F0ZSBkeW5h
bWljIHByZWRpY3Rpb25zIGZyb20gdmFsdWUgc291cmNlcyB0byB2YXJpYWJsZXMuCisjaWYgRU5B
QkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQordm9pZCBwcm9wYWdhdGUoR3JhcGgmLCBKU0dsb2Jh
bERhdGEqLCBDb2RlQmxvY2sqKTsKKyNlbHNlCitpbmxpbmUgdm9pZCBwcm9wYWdhdGUoR3JhcGgm
LCBKU0dsb2JhbERhdGEqLCBDb2RlQmxvY2sqKSB7IH0KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw5
IEBAIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICAgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxs
ZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbExpbmtJbmZvLmhv
dFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsK
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwg
Y29kZVB0cik7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAg
ICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKCZjYWxsTGlua0luZm8pOwog
ICAgIH0KICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
OCw2ICsyMTgsOCBAQCBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShIYW5kbGVIZWFwCiAg
ICAgOiBtX2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKICAgICAsIG1fd2Vha093bmVyKDApCiAgICAg
LCBtX3dlYWtPd25lckNvbnRleHQoMCkKKyAgICAsIG1fcHJldigwKQorICAgICwgbV9uZXh0KDAp
CiB7CiB9CiAKQEAgLTIyNSw2ICsyMjcsOCBAQCBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9k
ZShXVEY6OlNlbnRpCiAgICAgOiBtX2hhbmRsZUhlYXAoMCkKICAgICAsIG1fd2Vha093bmVyKDAp
CiAgICAgLCBtX3dlYWtPd25lckNvbnRleHQoMCkKKyAgICAsIG1fcHJldigwKQorICAgICwgbV9u
ZXh0KDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw2ICs5MywxNiBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IENvZGVCCiB7CiB9CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQordm9pZCBKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25DaGVja0tpbmQga2luZCkKK3sKKyAg
ICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyQWJzb2x1dGUoU2lnbmVkLCBUcnVzdGVk
SW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyAxIDogMzApLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1fY29kZUJsb2NrLT5tX2V4ZWN1dGVDb3VudGVyKSk7CisgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywga2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBjdGlfb3B0aW1p
emVfZnJvbV9sb29wIDogY3RpX29wdGltaXplX2Zyb21fcmV0KTsKKyAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7Cit9CisjZW5kaWYKKwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiB7CkBAIC0xMDIsNiAr
MTEyLDggQEAgdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQogICAgIHN0dWJDYWxsLmNhbGwo
dGltZW91dENoZWNrUmVnaXN0ZXIpOwogICAgIHN0dWJDYWxsLmdldEFyZ3VtZW50KDAsIHJlZ1Qx
LCByZWdUMCk7IC8vIHJlbG9hZCBsYXN0IHJlc3VsdCByZWdpc3RlcnMuCiAgICAgc2tpcFRpbWVv
dXQubGluayh0aGlzKTsKKyAgICAKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGlt
aXphdGlvbkNoZWNrKTsKIH0KICNlbHNlCiB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCkBA
IC0xMTEsNiArMTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQogICAgIHNraXBU
aW1lb3V0LmxpbmsodGhpcyk7CiAKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisgICAg
CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7CiB9CiAj
ZW5kaWYKIApAQCAtNjIzLDcgKzYzNyw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShD
b2RlUHRyKiBmdW4KIAogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7Ci0KKyAgICAK
ICAgICByZXR1cm4gSklUQ29kZShwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6
QmFzZWxpbmVKSVQpOwogfQogCkBAIC02MzcsNiArNjUxLDkgQEAgdm9pZCBKSVQ6OmxpbmtGb3Io
SlNGdW5jdGlvbiogY2FsbGVlLCBDbwogICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNM
aW5rZWQoKSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCgqZ2xvYmFsRGF0YSwg
Y2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+aG90UGF0aE90aGVyLCBjb2RlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsZWVDb2Rl
QmxvY2spCisgICAgICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2Fs
bExpbmtJbmZvKTsKICAgICB9CiAKICAgICAvLyBwYXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBub3Qg
Y29udGludWUgdG8gdHJ5IHRvIGxpbmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcyLDYgKzk3MiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8g
TG9hZHMgdGhlIGNoYXJhY3RlciB2YWx1ZSBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nIGlu
dG8gZHN0LgogICAgICAgICB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsKICAgICAgICAgCisgICAg
ICAgIGVudW0gT3B0aW1pemF0aW9uQ2hlY2tLaW5kIHsgTG9vcE9wdGltaXphdGlvbkNoZWNrLCBS
ZXRPcHRpbWl6YXRpb25DaGVjayB9OworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisg
ICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2luZCk7
CisjZWxzZQorICAgICAgICB2b2lkIGVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25D
aGVja0tpbmQpIHsgfQorI2VuZGlmCisgICAgICAgIAogICAgICAgICB2b2lkIGVtaXRUaW1lb3V0
Q2hlY2soKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJh
bmRUeXBlcyh1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNiArMTA2LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxWYXJhcmdzU2xvd0Nhc2Uo
SQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOwor
ICAgIAogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAKICAgICBlbWl0TG9hZChkc3QsIHJlZ1QxLCByZWdUMCk7CkBAIC0xMTgsNiArMTIwLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXRfb2JqZWN0X29yX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAg
IAogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgdGhpc1JlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiA5NDUzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyMyArMjcsNTAgQEAKICNkZWZpbmUgSklUQ29kZV9oCiAKICNpZiBFTkFCTEUoSklUKQot
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlByb2ZpbGVyLmgiCisjZW5kaWYK
IAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIGNsYXNzIEpTR2xvYmFs
RGF0YTsKICAgICBjbGFzcyBSZWdpc3RlckZpbGU7CisjZW5kaWYKICAgICAKICAgICBjbGFzcyBK
SVRDb2RlIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBDb2RlUmVmOwogICAgICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBD
b2RlUHRyOworI2Vsc2UKKyAgICAgICAgSklUQ29kZSgpIHsgfQorI2VuZGlmCiAgICAgcHVibGlj
OgogICAgICAgICBlbnVtIEpJVFR5cGUgeyBIb3N0Q2FsbFRodW5rLCBCYXNlbGluZUpJVCwgREZH
SklUIH07Ci0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQo
KQorICAgICAgICB7CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgICAg
IHJldHVybiBCYXNlbGluZUpJVDsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4gREZHSklUOwor
I2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIHRvcFRp
ZXJKSVQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gREZHSklUOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJVChKSVRUeXBlIGpp
dFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaml0VHlwZSwgaml0
VHlwZSA9PSBCYXNlbGluZUpJVCB8fCBqaXRUeXBlID09IERGR0pJVCk7CisgICAgICAgICAgICBy
ZXR1cm4gREZHSklUOworICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIEpJVENvZGUoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTUzLDcgKzgwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7
CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAgYm9vbCBvcGVyYXRvciAhKCkgY29uc3QK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICFtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKQEAgLTEyNCwxMCArMTUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
Q29kZVJlZiBtX3JlZjsKICAgICAgICAgSklUVHlwZSBtX2ppdFR5cGU7CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKICAgICB9OwogCiB9OwogCiAjZW5kaWYKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUyLDYgKzQ1Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhJbnMK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsKKyAg
ICAKICAgICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0gcmVnVDEpOwogICAgIEFTU0VSVChy
ZWdUMSAhPSByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVSZWdp
c3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC00NzIsNiArNDc0LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXRf
b2JqZWN0X29yX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBl
bWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAogICAgIEFT
U0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7CiAgICAgQVNTRVJUKHJlZ1QxICE9IHJl
dHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVyICE9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4MTYsMzIgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfY2hlY2tfaGFzXwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9F
TkQoKTsKIH0KIAorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9sb29w
KQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICAKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworCisgICAgSlNPYmplY3Qq
IGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFp
bik7CisgICAgaWYgKGVycm9yKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9w
dGltaXplZCBjb21waWxhdGlvbiBmcm9tIGxvb3AgZmFpbGVkLlxuIik7Cit9CisKK0RFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb21fcmV0KQoreworICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICAKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxG
cmFtZS0+c2NvcGVDaGFpbigpOworCisgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5j
b21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7CisgICAgaWYgKGVycm9yKQor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBm
cm9tIHJldCBmYWlsZWQuXG4iKTsKK30KKwogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wX2luc3RhbmNlb2YpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24g
OTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyMyw2ICs0MjMsOCBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9TVFVC
IGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKFNUVUJfQVJHU19ERUNMQVJB
VElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3B0aW1pemVfZnJv
bV9sb29wKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3B0
aW1pemVfZnJvbV9yZXQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RV
QiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9p
ZCogSklUX1NUVUIgY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrKFNUVUJfQVJHU19ERUNMQVJB
VElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3RpX29wX2NhbGxfaml0Q29tcGlsZShTVFVCX0FS
R1NfREVDTEFSQVRJT04pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDY2ICsyOCwxNiBA
QAogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKICNpbmNsdWRlICJVU3RyaW5nQnVpbGRlci5oIgogI2luY2x1ZGUgIlZlY3Rvci5o
IgogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0jaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIK
LSNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0Mgewog
CiBjb25zdCBDbGFzc0luZm8gRXhlY3V0YWJsZUJhc2U6OnNfaW5mbyA9IHsgIkV4ZWN1dGFibGUi
LCAwLCAwLCAwIH07CiAKLSNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShERkdfSklUKQotc3Rh
dGljIGJvb2wgdHJ5REZHQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRDb2RlJiBqaXRDb2RlKQotewotI2lmIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9O
UykKLSAgICAvLyBGSVhNRTogTm8gZmxvdyBjb250cm9sIHlldCBzdXBwb3J0ZWQsIGRvbid0IGJv
dGhlciBzY2FubmluZyB0aGUgYnl0ZWNvZGUgaWYgdGhlcmUgYXJlIGFueSBqdW1wIHRhcmdldHMu
Ci0gICAgaWYgKGNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQotCi0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBERkc6
OkdyYXBoIGRmZyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZh
cnMpOwotICAgIGlmICghcGFyc2UoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBERkc6OkpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2Jh
bERhdGEsIGRmZywgY29kZUJsb2NrKTsKLSAgICBkYXRhRmxvd0pJVC5jb21waWxlKGppdENvZGUp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spCi17Ci0jaWYgRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQot
ICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVy
IHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFyZ2V0cy4KLSAg
ICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0KLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIERGRzo6R3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChjYWxsZWVBcmdzRXhlYykKLSAgICAgICAgZGZnLnByZWRp
Y3RBcmd1bWVudFR5cGVzKGNhbGxlZUFyZ3NFeGVjKTsKLQotICAgIERGRzo6SklUQ29tcGlsZXIg
ZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFGbG93SklU
LmNvbXBpbGVGdW5jdGlvbihqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgIHJl
dHVybiB0cnVlOwotfQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCB0cnlE
RkdDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxz
ZTsgfQotc3RhdGljIGJvb2wgdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNT
dGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJl
dHVybiBmYWxzZTsgfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0gICAgCiB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKQogewogI2lmIEVO
QUJMRShKSVQpCkBAIC0xNjYsOCArMTE2LDE4IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKEUKIHsKIH0KIAorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQoreworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7
CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAw
OworICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BU
aWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hh
aW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUo
KSkpOworICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOwor
fQogCi1KU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgSlNPYmpl
Y3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKQEAgLTE4MywyNiArMTQzLDQxIEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0
YWJsZTo6Y29tcGlsZUludGVybmEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2V2
YWxDb2RlQmxvY2spOwotICAgIG1fZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29k
ZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFp
bk5vZGUtPmxvY2FsRGVwdGgoKSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwgc2Nv
cGVDaGFpbk5vZGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJs
b2NrLmdldCgpKSkpOworICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0g
bV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fZXZhbENv
ZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVjdCwg
c291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFpbk5vZGUtPmxvY2FsRGVwdGgoKSwgcHJldmlv
dXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBn
ZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBz
Y29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2Rl
QmxvY2suZ2V0KCksICEhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVH
ZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJz
dENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0
ZSgpKSkgewotICAgICAgICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9ldmFs
Q29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2Rl
QmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgZXZhbE5vZGUtPmRlc3Ryb3lE
YXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCiAgICAgZXZhbE5vZGUt
PmRlc3Ryb3lEYXRhKCk7CisgICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4
ZWMsIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGlm
ICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGls
ZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENv
ZGVGb3JDYWxsKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKQorICAgICAgICAgICAgQVNTRVJU
KCFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgfHwgIW1fZXZhbENvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aGFzSW5jb21pbmdDYWxscygpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpZiAobV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlcmUgaXMgYWxyZWFkeSBhbiBhbHRlcm5hdGl2ZSBwaWVjZSBvZiBjb2RlIGNvbXBp
bGVkIHdpdGggYSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQsIHNvIHdlIGNhbiBz
aWxlbnRseSBmYWlsLgorICAgICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJu
YXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kb250T3B0aW1pemVB
bnl0aW1lU29vbigpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9k
ZS0+Z2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgfQogI2lmICFF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpk
dW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jay0+ZGlzY2Fy
ZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5zZXRKSVRDb2Rl
KG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5k
aWYKIApAQCAtMjYxLDEwICsyMzYsMTkgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpj
aGVja1N5bnRheAogICAgIHJldHVybiBleGNlcHRpb247CiB9CiAKLUpTT2JqZWN0KiBQcm9ncmFt
RXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQogewotICAgIEFTU0VSVCghbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fcHJvZ3Jh
bUNvZGVCbG9jayk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBpZiAobV9wcm9ncmFt
Q29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAg
ICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6
bmV4dFRpZXJKSVQobV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NF
UlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIHJldHVybiBlcnJvcjsKK30KIAorSlNPYmpl
Y3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
K3sKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMjc3LDI1ICsy
NjEsNDAgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmpl
Y3QuZ2V0KCk7CiAgICAgCi0gICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFBy
b2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5w
cm92aWRlcigpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRv
cHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWlu
Tm9kZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdl
dCgpKSkpOworICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9wcm9n
cmFtQ29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6
Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fcHJvZ3JhbUNv
ZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUs
IGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVs
ZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9k
ZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgp
LCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9y
OjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxh
dGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsK
LSAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgICAgIG1fcHJvZ3JhbUNv
ZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFt
Q29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIHByb2dyYW1Ob2RlLT5k
ZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KIAogICAgIHBy
b2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOworICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+Y29weURh
dGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmds
b2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gdHJ5
REZHQ29tcGlsZShleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNh
bGwpOwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVk
ID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAg
ICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVC
bG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7CisgICAgICAgIGlmIChkZmdDb21waWxlZCkg
eworICAgICAgICAgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAg
ICAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlua0lu
Y29taW5nQ2FsbHMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX3Byb2dy
YW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2dyYW1D
b2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3Jh
bUNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgICAgIG1fcHJv
Z3JhbUNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwg
PSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVC
bG9jay5nZXQoKSk7CisgICAgICAgIH0KICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAg
ICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmRpc2NhcmRCeXRlY29kZSgpOwogI2VuZGlmCisg
ICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTM0Miw3ICszNDEs
MjkgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKICAgICBCYXNlOjpjbGVh
ckNvZGUoKTsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQoreworICAgIEFT
U0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJU
KCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlm
IChtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklU
KCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNo
YWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxs
KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5k
eW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVy
cm9yID0gY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBK
SVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgp
KSk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBl
cnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwg
RXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogewog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwpAQCAtMzU4LDExICszNzksMTIgQEAgSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAK
LSAgICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDYWxs
ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBm
YWxzZSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRy
KG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9jb2Rl
QmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpKSk7
CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2NvZGVCbG9ja0Zv
ckNhbGwucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21U
aWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxs
ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBm
YWxzZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2Rl
R2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHku
Z2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCks
IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgISFtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0
aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNv
ZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBn
ZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVh
cigpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1
bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNhbGwtPnJlbGVhc2VBbHRlcm5hdGl2ZSgp
KTsKICAgICAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bjsKICAgICB9CkBAIC0zNzMsMTcgKzM5NSwzMSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yCiAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+
c2hhcmVkU3ltYm9sVGFibGUoKTsKIAogICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9j
b2RlQmxvY2tGb3JDYWxsLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAg
IGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlRnVuY3Rpb24oZXhlYywgY2FsbGVlQXJn
c0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxlZCkKKyAg
ICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICBpZiAoaml0VHlwZSA9PSBK
SVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGls
ZUZ1bmN0aW9uKGV4ZWMsIGNhbGxlZUFyZ3NFeGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCks
IG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CisgICAg
ICAgIGlmIChkZmdDb21waWxlZCkgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2Fs
bC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmFs
dGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0
aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNhbGwtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
KyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKCk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ2Fs
bC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUoc2Nv
cGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgJm1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0KKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVy
YXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZGlzY2FyZEJ5dGVj
b2RlKCk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+c2V0
SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sp
OwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxlZUFyZ3NFeGVjKTsKQEAgLTQw
Myw4ICs0MzksMTAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgog
ICAgIHJldHVybiAwOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29u
c3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oaml0
VHlwZSk7CisgICAgCiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CiAgICAgUmVmUHRy
PEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEZ1bmN0
aW9uQm9keU5vZGU+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgMCwgbV9zb3VyY2Us
IG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQ
YXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CkBAIC00MTksMTEgKzQ1NywxMiBAQCBKU09iamVjdCog
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFT
U0VSVCghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwg
Z2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgp
LCB0cnVlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QuZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0
aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291
cmNlKCkuc3RhcnRPZmZzZXQoKSwgdHJ1ZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7
CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5
dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCks
ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVy
YXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29t
cGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkp
KSB7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7CisgICAgICAgIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVC
bG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAg
ICAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAg
ICB9CkBAIC00MzQsMTQgKzQ3MywzMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlRm9yCiAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5z
aGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVO
QUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewotICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUt
Pmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAmbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFs
c2U7CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgY29uc3Ry
dWN0b3JzIHdpdGggREZHLgorICAgICAgICBpZiAoZGZnQ29tcGlsZWQpIHsKKyAgICAgICAgICAg
IGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21p
bmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPiht
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5kb250T3B0aW1pemVBbnl0aW1lU29vbigp
OworICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGls
ZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0
KCksICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIH0KICNp
ZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRv
cjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwogICAgIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5
NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA2LDEwICszMDYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9ldmFsQ29k
ZUJsb2NrKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChl
eGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAg
ICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2V2YWxDb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0
dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogCiAgICAgICAgIEV2YWxD
b2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewpAQCAtMzQ0LDcgKzM0Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3Ry
dWN0dXJlRmxhZ3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBib29sKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50
ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAg
dm9pZCB1bmxpbmtDYWxscygpOwogCkBAIC0zNjksMTEgKzM3MSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9i
amVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYg
KCFtX3Byb2dyYW1Db2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fcHJvZ3JhbUNvZGVCbG9jayk7
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVj
dCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworCiAgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKG1fcHJvZ3JhbUNvZGVCbG9jayk7CkBAIC00MDMsNyArNDA3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHVu
bGlua0NhbGxzKCk7CiAKQEAgLTQ1MCwxMSArNDU0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fY29k
ZUJsb2NrRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGNhbGxlZUFyZ3NFeGVjKTsKKyAgICAgICAgICAg
ICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgICAgICAgICByZXR1
cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFy
Z3NFeGVjID0gMCk7CisKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsOwpAQCAtNDcx
LDExICs0NzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCi0g
ICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywg
c2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKik7CisKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsK
QEAgLTUwMSw2ICs1MDksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
Y29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNvbXBpbGVPcHRpbWl6ZWRGb3Ig
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggYSBjYWxsZnJhbWUgc2V0IHVwIHRvIGNhbGwgdGhp
cyBmdW5jdGlvbiwKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgbWFrZSBzcGVjdWxhdGl2
ZSBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSBhcmd1bWVudHMuCisgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+Y2FsbGVlKCkpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5p
bmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CisgICAgICAgICAgICBBU1NFUlQoYXNGdW5j
dGlvbihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNhbGwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGV4
ZWMpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAg
ICAgICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChleGVjLCBzY29wZUNo
YWluTm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKQEAgLTU0OSw4ICs1NzEsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IElkZW50
aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywg
RnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9v
bCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wpOwogCi0gICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyk7Ci0gICAgICAgIEpTT2JqZWN0KiBj
b21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsK
KyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2Nv
cGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBl
KTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICAKICAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICB1bnNp
Z25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzIDogMzE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTYwLDkgKzk2MCwxNyBAQAogI2Rl
ZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9USUVS
RURfQ09NUElMQVRJT04pICYmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBFTkFCTEVfVElFUkVE
X0NPTVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBm
b3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCi0jaWYgIWRlZmlu
ZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0
KSAmJiBQTEFURk9STShNQUMpCi0jZGVmaW5lIEVOQUJMRV9WQUxVRV9QUk9GSUxFUiAwCisjaWYg
IWRlZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVSKQorI2RlZmluZSBFTkFCTEVfVkFMVUVfUFJP
RklMRVIgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChF
TkFCTEVfRFlOQU1JQ19PUFRJTUlaQVRJT04pCisjZGVmaW5lIEVOQUJMRV9EWU5BTUlDX09QVElN
SVpBVElPTiBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OCiAjZW5kaWYKIAogI2lmICFkZWZpbmVk
KEVOQUJMRV9WRVJCT1NFX1ZBTFVFX1BST0ZJTEUpICYmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3Qu
aAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVs
TGlua2VkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNCArNDEsNjMgQEAgbmFtZXNwYWNl
IFdURiB7CiAKIGVudW0gU2VudGluZWxUYWcgeyBTZW50aW5lbCB9OwogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgTm9kZT4gY2xhc3MgU2VudGluZWxMaW5rZWRMaXN0IHsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBCYXNpY1Jhd1NlbnRpbmVsTm9kZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBO
b2RlKiBpdGVyYXRvcjsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZShTZW50aW5lbFRhZykKKyAg
ICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKCkKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAg
ICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UHJldihCYXNp
Y1Jhd1NlbnRpbmVsTm9kZSogcHJldikgeyBtX3ByZXYgPSBwcmV2OyB9CisgICAgdm9pZCBzZXRO
ZXh0KEJhc2ljUmF3U2VudGluZWxOb2RlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KKyAgICAK
KyAgICBUKiBwcmV2KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJldik7IH0KKyAgICBU
KiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fbmV4dCk7IH0KKyAgICAKKyAgICBi
b29sIGlzT25MaXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghIW1fcHJldiA9PSAh
IW1fbmV4dCk7CisgICAgICAgIHJldHVybiAhIW1fcHJldjsKKyAgICB9CisgICAgCisgICAgdm9p
ZCByZW1vdmUoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUqIG1f
bmV4dDsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9wcmV2OworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGUgPSBUPiBjbGFzcyBTZW50aW5lbExpbmtlZExp
c3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAKICAgICBTZW50aW5lbExp
bmtlZExpc3QoKTsKIAotICAgIHZvaWQgcHVzaChOb2RlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVt
b3ZlKE5vZGUqKTsKKyAgICB2b2lkIHB1c2goVCopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZShU
Kik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpOwogICAgIGl0ZXJhdG9yIGVuZCgpOwogCiBwcml2
YXRlOgotICAgIE5vZGUgbV9oZWFkU2VudGluZWw7Ci0gICAgTm9kZSBtX3RhaWxTZW50aW5lbDsK
KyAgICBSYXdOb2RlIG1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUgbV90YWlsU2VudGluZWw7
CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsTGlua2VkTGlz
dDxOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lk
IEJhc2ljUmF3U2VudGluZWxOb2RlPFQ+OjpyZW1vdmUoKQoreworICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxULCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxUPiA+OjpyZW1vdmUoc3RhdGljX2Nhc3Q8VCo+
KHRoaXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlu
bGluZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OlNlbnRpbmVsTGlua2VkTGlzdCgp
CiAgICAgOiBtX2hlYWRTZW50aW5lbChTZW50aW5lbCkKICAgICAsIG1fdGFpbFNlbnRpbmVsKFNl
bnRpbmVsKQogewpAQCAtNjksMjEgKzEwOCwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4g
aW5saW5lIFNlbnRpbmVsCiAgICAgbV90YWlsU2VudGluZWwuc2V0TmV4dCgwKTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8
Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6YmVnaW4oKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5l
bExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBS
YXdOb2RlPjo6YmVnaW4oKQogewotICAgIHJldHVybiBtX2hlYWRTZW50aW5lbC5uZXh0KCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX2hlYWRTZW50aW5lbC5uZXh0KCkpOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlz
dDxOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjplbmQoKQordGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5l
bExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBS
YXdOb2RlPjo6ZW5kKCkKIHsKLSAgICByZXR1cm4gJm1fdGFpbFNlbnRpbmVsOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUKj4oJm1fdGFpbFNlbnRpbmVsKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cHVzaChOb2Rl
KiBub2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2
b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6cHVzaChUKiBub2RlKQogewogICAg
IEFTU0VSVChub2RlKTsKLSAgICBOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOwotICAgIE5v
ZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgQVNTRVJUKCFub2RlLT5wcmV2
KCkpOworICAgIEFTU0VSVCghbm9kZS0+bmV4dCgpKTsKKyAgICAKKyAgICBSYXdOb2RlKiBwcmV2
ID0gJm1faGVhZFNlbnRpbmVsOworICAgIFJhd05vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5u
ZXh0KCk7CiAKICAgICBub2RlLT5zZXRQcmV2KHByZXYpOwogICAgIG5vZGUtPnNldE5leHQobmV4
dCk7CkBAIC05MiwxNyArMTM0LDI1IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUg
dm9pZCBTZW4KICAgICBuZXh0LT5zZXRQcmV2KG5vZGUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgTm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUoTm9k
ZSogbm9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUg
dm9pZCBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OnJlbW92ZShUKiBub2RlKQogewot
ICAgIE5vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7Ci0gICAgTm9kZSogbmV4dCA9IG5vZGUtPm5l
eHQoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKCEhbm9kZS0+cHJldigpKTsKKyAg
ICBBU1NFUlQoISFub2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYgPSBub2Rl
LT5wcmV2KCk7CisgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKIAogICAgIHByZXYt
PnNldE5leHQobmV4dCk7CiAgICAgbmV4dC0+c2V0UHJldihwcmV2KTsKKyAgICAKKyAgICBub2Rl
LT5zZXRQcmV2KDApOworICAgIG5vZGUtPnNldE5leHQoMCk7CiB9CiAKIH0KIAordXNpbmcgV1RG
OjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTsKIHVzaW5nIFdURjo6U2VudGluZWxMaW5rZWRMaXN0Owog
CiAjZW5kaWYK
</data>
<flag name="commit-queue"
          id="102782"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106370</attachid>
            <date>2011-09-05 18:07:39 -0700</date>
            <delta_ts>2011-09-05 21:16:27 -0700</delta_ts>
            <desc>the patch - partial fix review, fix Qt build</desc>
            <filename>dynopt_patch_13.diff</filename>
            <type>text/plain</type>
            <size>133997</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgwIEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
dGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAor
ICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0
b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2Rl
QmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNv
dW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3Vl
cyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bwor
ICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAg
ICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMs
IGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0
IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJz
dHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBz
dWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9y
bWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0
byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBz
dGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAg
Tm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlz
IGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFp
bGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYg
KHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3Bz
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZp
bGVzLmNtZDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzIpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhp
c3RpbmdFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRl
cm5hdGl2ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToK
KyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9j
azo6Y29tcGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpj
b21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlND
OjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJs
b2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxl
Lmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OlZh
bHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3RpY3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6ZHluYW1pY2FsbHlQcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2UpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0
cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29t
cGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFy
Z3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEds
b2JhbFZhcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0RvdWJs
ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZkpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmlzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjppc0pTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0lu
dDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0RvdWJsZUNv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVPZkpTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mSW50MzJDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZEb3VibGVDb25zdGFu
dCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGxQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjppc051bWJlclByZWRpY3Rpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjptYWtlUHJlZGljdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmlzSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aXNEb3VibGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkludDMy
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhbHVlT2ZEb3VibGVDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RG
R1Byb3BhZ2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6Om1lcmdlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFn
YXRvcjo6cHJvcGFnYXRlRm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
cHJvcGFnYXRlQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAqIGhlYXAvSGFuZGxlSGVhcC5oOgorICAgICAgICAo
SlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRUaW1lb3V0Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGpp
dC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklUKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6dG9w
VGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om5leHRUaWVySklUKToKKyAgICAgICAg
KiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgor
ICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAg
KEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlND
OjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6
Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRG
b3IpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9TZW50aW5lbExp
bmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OkJhc2ljUmF3
U2VudGluZWxOb2RlKToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnNldFBy
ZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6c2V0TmV4dCk6CisgICAg
ICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpwcmV2KToKKyAgICAgICAgKFdURjo6QmFz
aWNSYXdTZW50aW5lbE5vZGU6Om5leHQpOgorICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTo6aXNPbkxpc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6
Ojo6U2VudGluZWxMaW5rZWRMaXN0KToKKyAgICAgICAgKFdURjo6OjpiZWdpbik6CisgICAgICAg
IChXVEY6Ojo6ZW5kKToKKyAgICAgICAgKFdURjo6OjpwdXNoKToKKwogMjAxMS0wOS0wNSAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjk0NDQ1IGFuZCByOTQ0NDguCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAgU0VUKEph
dmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2Fzc2VtYmxlciIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J5dGVjb2RlIgogICAg
ICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0ZWNvbXBpbGVyIgorICAgICIke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vZGZnIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaGVhcCIKICAgICAiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2RlYnVnZ2VyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
aW50ZXJwcmV0ZXIiCkBAIC01NCw3ICs1NSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3BwCiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0
aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAotCisgICAgCiAgICAg
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAogICAgIGludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAogICAgIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGphdmFz
Y3JpcHRjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIgXAor
CS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcgXAogCS1JJChzcmNkaXIpL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3
YXJkaW5nSGVhZGVycyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw4IEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNU
cmFja2VyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGUFJJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbklu
Zm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmggXApAQCAtMTE2
LDYgKzExOCw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRv
ci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU1MCw2ICsxNTUwLDE0IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KKyAgICAgICAgICAgICAgICA8RmlsdGVy
CisgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJkZmciCisgICAgICAgICAgICAgICAgICAg
ICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXGRmZ1xERkdEcml2ZXIuaCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9G
aWxlPgorICAgICAgICAgICAgICAgIDwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJy
IgogCQkJPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwkocmV2aXNpb24gOTQ1MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJvcHMJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3
IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJ
bmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2
YVNjcmlwdENvcmVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4u
L3BhcnNlci87Li4vLi4vYnl0ZWNvbXBpbGVyLzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUvOy4u
Ly4uL2J5dGVjb2RlLzsuLi8uLi9pbnRlcnByZXRlci87Li4vLi4vd3RmLzsuLi8uLi9wcm9maWxl
cjsuLi8uLi9hc3NlbWJsZXIvOy4uLy4uL2RlYnVnZ2VyLzsuLi8uLi9oZWFwLzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0Rp
cilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxp
bmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXEphdmFT
Y3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHBy
aXZhdGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVhZHMm
cXVvdDsiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNjcmlwdENvcmVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4u
Ly4uLzsuLi8uLi9BUEkvOy4uLy4uL3BhcnNlci87Li4vLi4vYnl0ZWNvbXBpbGVyLzsuLi8uLi9k
ZmcvOy4uLy4uL2ppdC87Li4vLi4vcnVudGltZS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVy
cHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3Byb2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87Li4vLi4v
ZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRl
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7
JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktp
dExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhyZWFkcyZxdW90OyIKIAkJUHJlcHJvY2Vzc29yRGVm
aW5pdGlvbnM9Il9fU1REX0MiCiAJCUZvcmNlZEluY2x1ZGVGaWxlcz0iSUNVVmVyc2lvbi5oIgog
CS8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5j
bWQJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNtZAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBta2RpciAiJVByaXZhdGVIZWFkZXJzRGlyZWN0b3J5JSIgMj5OVUwK
IGZvciAlJWQgaW4gKAogICAgIGFzc2VtYmxlcgogICAgIGJ5dGVjb2RlCisgICAgZGZnCiAgICAg
aGVhcAogICAgIGRlYnVnZ2VyCiAgICAgaW50ZXJwcmV0ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw2ICs1NiwxMCBAQAogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAg
Ki87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1
MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZU
YWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87
IH07CisJCTBGRDNDODI1MTQxMTVENDAwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVE
MUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLzsgfTsKKwkJMEZEM0M4MjYxNDExNUQ0
MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLzsgfTsKKwkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQx
MTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi87IH07CisJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMzc1LDcgKzM3
OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3MjcwRUQxQ0U2OTAwRjFG
NjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2OUEwNzJCMEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdp
c3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5oICovOyB9OwogCQk5NjlBMDcy
QzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyOTBFRDFDRTY5MDBGMUY2ODEgLyog
U2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0JCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IH07CisJCTk2
OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8q
IENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3Ry
aWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5QTA3OTcwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVC
bG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5
QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29k
ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovOyB9OwogCQk5NjlB
MDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJ
bnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5LDYgKzc4MywxMCBAQAogCQkwRkM4MTUwOTE0MDQz
QkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFi
bGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0
aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4
MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJvcGFnYXRvci5jcHA7IHBhdGggPSBkZmcvREZHUHJv
cGFnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNDODI0MTQxMTVE
MjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0Fs
bG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEwIEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFE
NyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8sCisJCQkJMEZE
M0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3BwICovLAorCQkJCTBGRDND
ODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKKwkJCQkwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLywKIAkJCQk4NkVDQTRGMDEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAy
QjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI2MTcsNiArMjYyOSw4IEBACiAJ
CQkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyMkM1MzE0MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzMsNiArMzA0Nyw4IEBACiAJCQlpc2Eg
PSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFn
YXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQz
QzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw2ICsxMDgsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywg
YWRkcmVzcyk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMkFic29sdXRlKFJlc3VsdENv
bmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaW0oc3JjLm1fdmFsdWUsIGRlc3QubV9wdHIp
OworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQp
KSk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9ybShyaWdodCwgbGVmdC5tX3B0cik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMSw2ICsx
MDAxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4
NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBzcmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZGVzdC5t
X3B0ciksIFg4NlJlZ2lzdGVyczo6cjExKTsKKyAgICAgICAgYWRkMzIoc3JjLCBBZGRyZXNzKFg4
NlJlZ2lzdGVyczo6cjExKSk7CisjZWxzZQorICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2ltKHNy
Yy5tX3ZhbHVlLCBkZXN0Lm1fcHRyKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gSnVtcChtX2Fz
c2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCiAgICAgSnVtcCBicmFu
Y2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVz
dCkKICAgICB7CiAgICAgICAgIGFkZDMyKHNyYywgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShy
ZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnNldENDX3IoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0
KTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwogICAgIH0KKyAg
ICAKKyAgICBKdW1wIGJyYW5jaEFkZDMyQWJzb2x1dGUoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRy
dXN0ZWRJbW0zMiBzcmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGRlc3QubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBh
ZGQzMihzcmMsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CiAKICAgICBKdW1w
IGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMSw5ICsx
NDAxLDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiAjZW5kaWYKIH0KIAot
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
U3ltYm9sVGFibGUqIHN5bVRhYiwgYm9vbCBpc0NvbnN0cnVjdG9yKQorQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlw
ZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqIHN5
bVRhYiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRp
dmUpCiAgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3du
ZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkuaGVhcCkKKyAgICAsIG1fZXhlY3V0ZUNvdW50ZXIoLTEwMDApIC8vIHRy
aWdnZXIgb3B0aW1pemF0aW9uIHdoZW4gc2lnbiBiaXQgY2xlYXJzCiAgICAgLCBtX251bUNhbGxl
ZVJlZ2lzdGVycygwKQogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMo
MCkKQEAgLTE0MjIsNiArMTQyMyw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9zb3VyY2VP
ZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCisgICAgLCBt
X2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQogewogICAgIEFTU0VSVChtX3NvdXJjZSk7CiAKQEAg
LTE0NDEsMTUgKzE0NDMsMTggQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiICAgYXJnID0gJXU6ICIsIGkgKyAxKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICIsIHByb2ZpbGUtPmJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAg
InNhbXBsZXMgPSAldSwgaW50MzIgPSAldSwgZG91YmxlID0gJXUsIGNlbGwgPSAldSwgYXJyYXkg
PSAldVxuIiwKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSwKLSAg
ICAgICAgICAgICAgICBwcm9maWxlLT5wcm9iYWJpbGl0eU9mSW50MzIoKSwKLSAgICAgICAgICAg
ICAgICBwcm9maWxlLT5wcm9iYWJpbGl0eU9mRG91YmxlKCksCi0gICAgICAgICAgICAgICAgcHJv
ZmlsZS0+cHJvYmFiaWxpdHlPZkNlbGwoKSwKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5wcm9i
YWJpbGl0eU9mQXJyYXkoKSk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3RkZXJyKTsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogICAgIH0KICNlbmRpZgorICAgIAorICAgIC8vIFdl
IHNob3VsZCBub3QgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgdGhlcmUgYXJlIGluY29taW5nIGNh
bGxzLiBCdXQKKyAgICAvLyBpZiB0aGlzIGlzIGNhbGxlZCBkdXJpbmcgaGVhcCBkZXN0cnVjdGlv
biwgdGhlbiB0aGVyZSBtYXkgc3RpbGwgYmUKKyAgICAvLyBpbmNvbWluZyBjYWxscywgd2hpY2gg
aXMgaGFybWxlc3MuCisgICAgCisgICAgLy8gTm90ZSB0aGF0IG91ciBvdXRnb2luZyBjYWxscyB3
aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBDb2RlQmxvY2tzJworICAgIC8vIG1faW5jb21pbmdD
YWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB+Q2FsbExpbmtJ
bmZvCisgICAgLy8gZGVzdHJ1Y3RvcnMuCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGZvciAoc2l6
ZV90IHNpemUgPSBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQpAQCAtMTUxOSw2ICsxNTI0LDggQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdAogewogICAgIGJvb2wgaGFuZGxlV2Vha1JlZmVyZW5jZXMgPSBmYWxzZTsKICAg
ICAKKyAgICBpZiAoISFtX2FsdGVybmF0aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3Qp
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0YWJsZSk7CiAgICAgaWYgKG1fcmFy
ZURhdGEpIHsKQEAgLTE3ODksOCArMTc5NiwzMCBAQCB2b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0
aXZhdGlvbihDYWxsRnJhCiB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKK3ZvaWQgQ2FsbExpbmtJ
bmZvOjp1bmxpbmsoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZXBhdGNoQnVmZmVyJiByZXBh
dGNoQnVmZmVyKQoreworICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKKyAgICAKKyAgICBpZiAoaXNE
RkcpIHsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Q29kZUxvY2F0aW9uQ2FsbChjYWxsUmV0dXJuTG9jYXRpb24pLCBpc0NhbGwgPyBvcGVyYXRpb25M
aW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOworI2Vsc2UKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwgaXNDYWxs
PyBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6IGdsb2JhbERhdGEu
aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOworICAgIGhhc1NlZW5TaG91bGRS
ZXBhdGNoID0gZmFsc2U7CisgICAgY2FsbGVlLmNsZWFyKCk7CisKKyAgICAvLyBJdCB3aWxsIGJl
IG9uIGEgbGlzdCBpZiB0aGUgY2FsbGVlIGhhcyBhIGNvZGUgYmxvY2suCisgICAgaWYgKGlzT25M
aXN0KCkpCisgICAgICAgIHJlbW92ZSgpOworfQorCiB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2Fs
bHMoKQogeworICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIG1fYWx0ZXJuYXRpdmUt
PnVubGlua0NhbGxzKCk7CiAgICAgaWYgKCEobV9jYWxsTGlua0luZm9zLnNpemUoKSB8fCBtX21l
dGhvZENhbGxMaW5rSW5mb3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9n
bG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKQEAgLTE3OTksMjQgKzE4MjgsMTAxIEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtDYWxscygpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NhbGxM
aW5rSW5mb3Muc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3NbaV0u
aXNMaW5rZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZ2V0SklUQ29k
ZSgpLmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwobV9jYWxs
TGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tpXS5pc0Nh
bGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QpOwotI2Vsc2UK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwo
bV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiksIG1fY2FsbExpbmtJbmZvc1tp
XS5pc0NhbGwgPyBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSA6
IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkpOwotICAg
ICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCk7CisgICAgICAgIG1fY2FsbExpbmtJbmZv
c1tpXS51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7CiAgICAgfQogfQorCit2
b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCit7CisgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKHRoaXMpOworICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4o
KSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdp
bigpLT51bmxpbmsoKm1fZ2xvYmFsRGF0YSwgcmVwYXRjaEJ1ZmZlcik7Cit9CiAjZW5kaWYKIAog
dm9pZCBDb2RlQmxvY2s6OmNsZWFyRXZhbENhY2hlKCkKIHsKKyAgICBpZiAoISFtX2FsdGVybmF0
aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT5jbGVhckV2YWxDYWNoZSgpOwogICAgIGlmICgh
bV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVD
YWNoZS5jbGVhcigpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgcmVw
bGFjZUV4aXN0aW5nRW50cmllcyhWZWN0b3I8VD4mIHRhcmdldCwgVmVjdG9yPFQ+JiBzb3VyY2Up
Cit7CisgICAgQVNTRVJUKHRhcmdldC5zaXplKCkgPD0gc291cmNlLnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXQuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhcmdldFtp
XSA9IHNvdXJjZVtpXTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0
aXZlKCkKK3sKKyAgICBpZiAoIW1fYWx0ZXJuYXRpdmUpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fY29uc3RhbnRSZWdpc3RlcnMsIG1fYWx0ZXJu
YXRpdmUtPm1fY29uc3RhbnRSZWdpc3RlcnMpOworICAgIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMo
bV9mdW5jdGlvbkRlY2xzLCBtX2FsdGVybmF0aXZlLT5tX2Z1bmN0aW9uRGVjbHMpOworICAgIHJl
cGxhY2VFeGlzdGluZ0VudHJpZXMobV9mdW5jdGlvbkV4cHJzLCBtX2FsdGVybmF0aXZlLT5tX2Z1
bmN0aW9uRXhwcnMpOworfQorCisvLyBGSVhNRTogSW1wbGVtZW50IE9TUi4gSWYgY29tcGlsZU9w
dGltaXplZCgpIGlzIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdGhlciB0aGFuIHRoZQorLy8gZXBp
bG9ndWUsIGRvIE9TUiBmcm9tIHRoZSBvbGQgY29kZSBibG9jayB0byB0aGUgbmV3IG9uZS4KKwor
Ly8gRklYTUU6IEFmdGVyIGRvaW5nIHN1Y2Nlc3NmdWwgb3B0aW1pemVkIGNvbXBpbGF0aW9uLCBy
ZXNldCB0aGUgcHJvZmlsaW5nIGNvdW50ZXIgdG8gLTEsIHNvCisvLyB0aGF0IHRoZSBuZXh0IGV4
ZWN1dGlvbiBvZiB0aGUgb2xkIGNvZGUgYmxvY2sgd2lsbCBqdW1wIHN0cmFpZ2h0IGludG8gY29t
cGlsZU9wdGltaXplZCgpCisvLyBhbmQgcGVyZm9ybSBPU1IuCisKKy8vIEZJWE1FOiBFbnN1cmUg
dGhhdCBhIGNhbGwgdG8gY29tcGlsZU9wdGltaXplZCgpIGp1c3QgZG9lcyBPU1IgKGFuZCByZXNl
dHMgdGhlIGNvdW50ZXIgdG8gLTEpCisvLyBpZiB0aGUgY29kZSBoYWQgYWxyZWFkeSBiZWVuIGNv
bXBpbGVkLgorCitDb2RlQmxvY2sqIFByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sK
KyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRh
YmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZSgpOworfQorCitDb2RlQmxvY2sqIEV2YWxDb2RlQmxv
Y2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PEV2YWxFeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZSgpOworfQorCitDb2Rl
QmxvY2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuICZz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVy
YXRlZEJ5dGVjb2RlRm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2Rl
Rm9yQ2FsbCk7Cit9CisKK0pTT2JqZWN0KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorewor
ICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJK
SVQoZ2V0SklUVHlwZSgpKSkgeworICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1cmUg
d2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgorICAgICAgICBkb250T3B0aW1p
emVBbnl0aW1lU29vbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNPYmplY3Qq
IGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgIHJldHVybiBl
cnJvcjsKK30KKworSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYg
KHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRK
SVRUeXBlKCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24n
dCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3Ig
PSBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGls
ZU9wdGltaXplZChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgcmV0dXJuIGVycm9yOworfQor
CitKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgaWYgKHJlcGxh
Y2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBl
KCkpKSB7CisgICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQg
dGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCisgICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29u
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVP
cHRpbWl6ZWRGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVG
b3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3Qu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtOTgsMTIg
Kzk5LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBFTkFCTEUoSklUKQotICAg
IHN0cnVjdCBDYWxsTGlua0luZm8geworICAgIHN0cnVjdCBDYWxsTGlua0luZm86IHB1YmxpYyBC
YXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgQ2FsbExpbmtJbmZv
KCkKICAgICAgICAgICAgIDogaGFzU2VlblNob3VsZFJlcGF0Y2goZmFsc2UpCiAgICAgICAgICAg
ICAsIGlzQ2FsbChmYWxzZSkKKyAgICAgICAgICAgICwgaXNERkcoZmFsc2UpCiAgICAgICAgIHsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgfkNhbGxMaW5rSW5mbygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZSgpOwor
ICAgICAgICB9CiAKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9u
OyAvLyBpdCdzIGEgbmVhciBjYWxsIGluIHRoZSBvbGQgSklULCBvciBhIG5vcm1hbCBjYWxsIGlu
IERGRwogICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwpAQCAt
MTExLDEzICsxMTksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpJVFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgICAgIGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2gg
OiAxOwogICAgICAgICBib29sIGlzQ2FsbCA6IDE7CisgICAgICAgIGJvb2wgaXNERkcgOiAxOwog
CiAgICAgICAgIGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBjYWxsZWU7IH0KLSAgICAgICAgdm9p
ZCB1bmxpbmsoKQotICAgICAgICB7Ci0gICAgICAgICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9
IGZhbHNlOwotICAgICAgICAgICAgY2FsbGVlLmNsZWFyKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
dm9pZCB1bmxpbmsoSlNHbG9iYWxEYXRhJiwgUmVwYXRjaEJ1ZmZlciYpOwogCiAgICAgICAgIGJv
b2wgc2Vlbk9uY2UoKQogICAgICAgICB7CkBAIC0yMTAsMTMgKzIxNSwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVQ7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUsIGJvb2wgaXNDb25zdHJ1Y3Rvcik7CisgICAgICAgIENvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCos
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJv
bFRhYmxlKiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJu
YXRpdmUpOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxP
YmplY3Q7CiAgICAgICAgIEhlYXAqIG1faGVhcDsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdmly
dHVhbCB+Q29kZUJsb2NrKCk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQorICAgICAgICBQYXNzT3duUHRy
PENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5y
ZWxlYXNlKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwpAQCAtMjc5
LDYgKzI4NywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
dW5saW5rQ2FsbHMoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaGFzSW5jb21pbmdDYWxscygp
IHsgcmV0dXJuIG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQo
KTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxMaW5rSW5m
byogaW5jb21pbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5jb21pbmdDYWxscy5wdXNo
KGluY29taW5nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB1bmxpbmtJbmNv
bWluZ0NhbGxzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTMwMCw4
ICszMTcsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCi0g
ICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2lzQ29uc3RydWN0b3IgPyBv
d25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpIDogb3duZXJF
eGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCk7IH0KKyAgICAgICAgdm9pZCBz
ZXRKSVRDb2RlKGNvbnN0IEpJVENvZGUmIGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
V2l0aEFyaXR5Q2hlY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7
CisgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKKyAgICAgICAgfQorICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJu
IG1faml0Q29kZS5qaXRUeXBlKCk7IH0KICAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGV4ZWN1dGFi
bGVQb29sKCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVQb29sKCk7IH0KKyAg
ICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSopID0gMDsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
KCkgPSAwOworI2Vsc2UKKyAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyBy
ZXR1cm4gSklUQ29kZTo6QmFzZWxpbmVKSVQ7IH0KICNlbmRpZgogCiAgICAgICAgIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRh
YmxlLmdldCgpOyB9CkBAIC0zOTgsNiArNDI1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFZhbHVlUHJv
ZmlsZSwgaW50LCBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV92YWx1ZVByb2ZpbGVz
LCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIH0KKyAg
ICAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpbnQgYXJndW1lbnRJ
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGluZGV4ID0gYXJndW1lbnRJbmRleCAt
IDE7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBtX3Zh
bHVlUHJvZmlsZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSB2YWx1ZVByb2ZpbGUoYXJndW1lbnRJbmRleCAtIDEp
OworICAgICAgICAgICAgaWYgKHJlc3VsdC0+Ynl0ZWNvZGVPZmZzZXQgIT0gLTEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CiAjZW5kaWYKIAogICAgICAgICB1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5mb0NvdW50KCkgY29u
c3QKQEAgLTUzNSw2ICs1NzIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEV2YWxDb2Rl
Q2FjaGUmIGV2YWxDb2RlQ2FjaGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0
dXJuIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNoZTsgfQogCiAgICAgICAgIHZvaWQgc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY29weURhdGFGcm9tQWx0ZXJuYXRpdmUo
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90IG1fZXhlY3V0
ZUNvdW50ZXI7CiAKICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJl
cnMgcHJpdmF0ZS4KIApAQCAtNTk0LDYgKzY0NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2ZUluZm9zOwogICAgICAg
ICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFZlY3RvcjxN
ZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsKKyAgICAgICAgSklUQ29k
ZSBtX2ppdENvZGU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRo
QXJpdHlDaGVjazsKKyAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRp
ZgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFZh
bHVlUHJvZmlsZSwgOD4gbV92YWx1ZVByb2ZpbGVzOwpAQCAtNjEwLDYgKzY2NCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCisgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7IC8vIEZJWE1FIG1ha2UgdGhpcyBk
byBzb21ldGhpbmcKKwogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgcHVibGljOgpAQCAtNjQ2LDkgKzcwMiw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIC8vIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIGl0LgogCiAg
ICAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Ci0gICAgcHVibGlj
OgotICAgICAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFz
c1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9m
ZnNldCkKLSAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgJm1fdW5zaGFyZWRT
eW1ib2xUYWJsZSwgZmFsc2UpCisgICAgcHJvdGVjdGVkOgorICAgICAgICBHbG9iYWxDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAm
bV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCkBAIC02NTgsMTYgKzcxNCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFByb2dyYW1Db2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQotICAgICAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2VQcm92aWRlciwgMCkKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgIDogR2xv
YmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291
cmNlUHJvdmlkZXIsIDAsIGFsdGVybmF0aXZlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAg
ICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAg
ICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisjZW5kaWYKICAgICB9Owog
CiAgICAgY2xhc3MgRXZhbENvZGVCbG9jayA6IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogICAg
IHB1YmxpYzoKLSAgICAgICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoKQotICAgICAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2VQcm92aWRlciwgMCkKKyAgICAgICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoLCBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVBy
b3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgICAgICwgbV9iYXNlU2NvcGVEZXB0aChi
YXNlU2NvcGVEZXB0aCkKICAgICAgICAgewogICAgICAgICB9CkBAIC02ODEsNiArNzQzLDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKG1fdmFyaWFibGVzLmlzRW1wdHko
KSk7CiAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5zd2FwKHZhcmlhYmxlcyk7CiAgICAgICAgIH0K
KyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1
YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
KTsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisjZW5kaWYKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2Jhc2VTY29wZURlcHRoOwpAQCAtNjkzLDE0ICs3
NjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gaW5pdGlh
bGlzZSB0aGUgQ29kZUJsb2NrIGJlZm9yZSB3ZSBjb3VsZCBpbml0aWFsaXNlIGFueSBSZWZQdHIg
dG8gaG9sZCB0aGUgc2hhcmVkCiAgICAgICAgIC8vIHN5bWJvbCB0YWJsZSwgc28gd2UganVzdCBw
YXNzIGFzIGEgcmF3IHBvaW50ZXIgd2l0aCBhIHJlZiBjb3VudCBvZiAxLiAgV2UgdGhlbiBtYW51
YWxseSBkZXJlZgogICAgICAgICAvLyBpbiB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBl
IGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBib29sIGlz
Q29uc3RydWN0b3IpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNv
ZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIFNoYXJl
ZFN5bWJvbFRhYmxlOjpjcmVhdGUoKS5sZWFrUmVmKCksIGlzQ29uc3RydWN0b3IpCisgICAgICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBD
b2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
Ym9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisg
ICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxP
YmplY3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIFNoYXJlZFN5bWJvbFRhYmxlOjpj
cmVhdGUoKS5sZWFrUmVmKCksIGlzQ29uc3RydWN0b3IsIGFsdGVybmF0aXZlKQogICAgICAgICB7
CiAgICAgICAgIH0KICAgICAgICAgfkZ1bmN0aW9uQ29kZUJsb2NrKCkKICAgICAgICAgewogICAg
ICAgICAgICAgc2hhcmVkU3ltYm9sVGFibGUoKS0+ZGVyZWYoKTsKICAgICAgICAgfQorICAgICAg
ICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAg
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKKyNlbmRpZgogICAgIH07CiAK
ICAgICBpbmxpbmUgUmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiA5
NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gY291bnRzICogY2VydGFpbnR5IC8g
bnVtYmVyT2ZTYW1wbGVzOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgdW5zaWduZWQgbnVt
YmVyT2ZJbnQzMnMoKSBjb25zdAogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsK
QEAgLTE0Miw2ICsxNDIsODYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgewogICAgICAg
ICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9mQXJyYXlzKCksIG51bWJlck9mU2Ft
cGxlcygpKTsKICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91
dCkKKyAgICB7CisgICAgICAgIGZwcmludGYob3V0LAorICAgICAgICAgICAgICAgICJzYW1wbGVz
ID0gJXUsIGludDMyID0gJXUsIGRvdWJsZSA9ICV1LCBjZWxsID0gJXUsIGFycmF5ID0gJXUiLAor
ICAgICAgICAgICAgICAgIG51bWJlck9mU2FtcGxlcygpLAorICAgICAgICAgICAgICAgIG51bWJl
ck9mSW50MzJzKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZEb3VibGVzKCksCisgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZDZWxscygpLAorICAgICAgICAgICAgICAgIG51bWJlck9mQXJyYXlz
KCkpOworICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoISFidWNr
ZXRzW2ldIHx8ICEhd2Vha0J1Y2tldHNbaV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICI6ICIpOworICAgICAgICAgICAg
ICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0pCisgICAgICAgICAgICAgICAgZnByaW50
ZihvdXQsICIlcyIsIEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKS5kZXNjcmlwdGlvbigpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCEhd2Vha0J1Y2tldHNbaV0pCisgICAgICAg
ICAgICAgICAgZnByaW50ZihvdXQsICJEZWFkQ2VsbCIpOworICAgICAgICB9CisgICAgfQorI2Vu
ZGlmCisgICAgCisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICB1bnNpZ25lZCBzYW1w
bGVzOworICAgICAgICB1bnNpZ25lZCBpbnQzMnM7CisgICAgICAgIHVuc2lnbmVkIGRvdWJsZXM7
CisgICAgICAgIHVuc2lnbmVkIGNlbGxzOworICAgICAgICB1bnNpZ25lZCBhcnJheXM7CisgICAg
fTsKKworICAgIC8vIE9wdGltaXplZCBtZXRob2QgZm9yIGdldHRpbmcgYWxsIGNvdW50cyBhdCBv
bmNlLgorICAgIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
c2FtcGxlcyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludDMycyAgPSAwOworICAgICAgICB1bnNp
Z25lZCBkb3VibGVzID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2VsbHMgICA9IDA7CisgICAgICAg
IHVuc2lnbmVkIGFycmF5cyAgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1Y2tl
dHNbaV0pIHsKKyAgICAgICAgICAgICAgICBXZWFrQnVja2V0IHdlYWtCdWNrZXQgPSB3ZWFrQnVj
a2V0c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHNhbXBsZXMrKzsKKyAgICAgICAgICAgICAgICAgICAgY2VsbHMrKzsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHdlYWtCdWNrZXQuZ2V0Q2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6
OnNfaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5cysrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2FtcGxlcysrOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNb
aV0pOworICAgICAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBp
bnQzMnMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAg
ICAgICAgICAgZG91YmxlcysrOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgICAgICAgICBjZWxscysrOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJy
YXkoJmdsb2JhbERhdGEsIHZhbHVlLmFzQ2VsbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgYXJy
YXlzKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRp
c3RpY3Muc2FtcGxlcyA9IHNhbXBsZXM7CisgICAgICAgIHN0YXRpc3RpY3MuaW50MzJzICA9IGlu
dDMyczsKKyAgICAgICAgc3RhdGlzdGljcy5kb3VibGVzID0gZG91YmxlczsKKyAgICAgICAgc3Rh
dGlzdGljcy5jZWxscyAgID0gY2VsbHM7CisgICAgICAgIHN0YXRpc3RpY3MuYXJyYXlzICA9IGFy
cmF5czsKKyAgICB9CiAgICAgCiAgICAgaW50IGJ5dGVjb2RlT2Zmc2V0OyAvLyAtMSBmb3IgcHJv
bG9ndWUKICAgICBFbmNvZGVkSlNWYWx1ZSBidWNrZXRzW251bWJlck9mQnVja2V0c107CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkxLDcgKzE5MSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnByZXNlcnZlTGFzdFZhcigK
ICAgICAgICAgbV9sYXN0VmFyID0gJm1fY2FsbGVlUmVnaXN0ZXJzLmxhc3QoKTsKIH0KIAotQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9k
ZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwg
UHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJs
b2NrLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91bGRFbWl0
RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAgICAgLCBt
X3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0
c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkBAIC0yMjgsNiArMjI4
LDkgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIAogICAg
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgPSAxOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Ig
InRoaXMiCiAgICAgY29kZUJsb2NrLT5tX251bUNhcHR1cmVkVmFycyA9IGNvZGVCbG9jay0+bV9u
dW1WYXJzOworICAgIAorICAgIGlmIChjb21waWxhdGlvbktpbmQgPT0gT3B0aW1pemluZ0NvbXBp
bGF0aW9uKQorICAgICAgICByZXR1cm47CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LmdldCgpOwogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpAQCAtMjU4LDcgKzI2MSw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICB9CiB9CiAKLUJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJv
ZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUs
IENvZGVCbG9jayogY29kZUJsb2NrKQorQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keSwgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
bXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+
Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tz
KHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1f
c2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9y
dHNSaWNoU291cmNlSW5mbygpKQpAQCAtNDE5LDcgKzQyMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihGdW4KICAgICB9CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5v
ZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUs
IEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kKQogICAgIDogbV9zaG91
bGRFbWl0RGVidWdIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCiAg
ICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5z
dXBwb3J0c1Byb2ZpbGluZygpKQogICAgICwgbV9zaG91bGRFbWl0UmljaFNvdXJjZUluZm8oc2Nv
cGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5zdXBwb3J0c1JpY2hTb3VyY2VJbmZvKCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBzR2VuZXJhdGVkQ29kZSk7CiAgICAg
ICAgIHN0YXRpYyBib29sIGR1bXBzR2VuZXJhdGVkQ29kZSgpOwogCi0gICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFBy
b2dyYW1Db2RlQmxvY2sqKTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5
Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKLSAgICAg
ICAgQnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRh
YmxlKiwgRXZhbENvZGVCbG9jayopOworICAgICAgICBlbnVtIENvbXBpbGF0aW9uS2luZCB7IEZp
cnN0Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21waWxhdGlvbiB9OworICAgICAgICAKKyAgICAg
ICAgQnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJv
bFRhYmxlKiwgUHJvZ3JhbUNvZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5
dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJv
bFRhYmxlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25LaW5kKTsKKyAgICAgICAgQnl0ZWNvZGVH
ZW5lcmF0b3IoRXZhbE5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgRXZhbENv
ZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAgICAgICAgIGNvbnN0IENv
bW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fZ2xvYmFs
RGF0YS0+cHJvcGVydHlOYW1lczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDkgKzQ5LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFRoaXMg
Y2xhc3MgaXMgdXNlZCB0byBjb21waWxlIHRoZSBkYXRhZmxvdyBncmFwaCBmcm9tIGEgQ29kZUJs
b2NrLgogY2xhc3MgQnl0ZUNvZGVQYXJzZXIgewogcHVibGljOgotICAgIEJ5dGVDb2RlUGFyc2Vy
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdyYXBoJiBn
cmFwaCkKKyAgICBCeXRlQ29kZVBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEdyYXBoJiBncmFwaCkK
ICAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCiAg
ICAgICAgICwgbV9ncmFwaChncmFwaCkKICAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQogICAg
ICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2UpCkBAIC02NSw2ICs2Niw5IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX3BhcmFtZXRlclNsb3RzKDApCiAgICAgICAgICwgbV9udW1QYXNzZWRWYXJBcmdz
KDApCiAgICAgeworI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKyAgICAgICAgQVNT
RVJUKG1fcHJvZmlsZWRCbG9jayk7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBQYXJzZSBhIGZ1
bGwgQ29kZUJsb2NrIG9mIGJ5dGVjb2RlLgpAQCAtMTAyLDkgKzEwNiw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgcmV0dXJuIGdldExvY2FsKCh1bnNp
Z25lZClvcGVyYW5kKTsKICAgICB9Ci0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRl
eCB2YWx1ZSwgUHJlZGljdGVkVHlwZSBzdGF0aWNQcmVkaWN0aW9uID0gUHJlZGljdE5vbmUpCisg
ICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSwgUHJlZGljdGVkVHlwZSB3
ZWFrUHJlZGljdGlvbiA9IFByZWRpY3ROb25lKQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5wcmVk
aWN0KG9wZXJhbmQsIHN0YXRpY1ByZWRpY3Rpb24sIFN0YXRpY1ByZWRpY3Rpb24pOworICAgICAg
ICBtX2dyYXBoLnByZWRpY3Qob3BlcmFuZCwgd2Vha1ByZWRpY3Rpb24sIFdlYWtQcmVkaWN0aW9u
KTsKIAogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTQyMSwxOSArNDI1LDIxIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJnSWR4KSk7CiAgICAgICAgIE5vZGVJbmRl
eCBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBPcEluZm8oMCksIE9wSW5mbyhQ
cmVkaWN0Tm9uZSkpOwogICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICBpZiAoaW50
ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KQorICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dElu
c3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAg
ICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgICAgIHN0
cm9uZ2x5UHJlZGljdChjYWxsLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCkpOworICAgICAgICB9CiAgICAgICAgIGlmIChSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAg
ICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IGFyZ0NvdW50OwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAKLSAgICB2b2lkIHN0YXRp
Y2FsbHlQcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHdlYWtseVBy
ZWRpY3RBcnJheShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5w
cmVkaWN0KG1fZ3JhcGhbbm9kZUluZGV4XSwgUHJlZGljdEFycmF5LCBTdGF0aWNQcmVkaWN0aW9u
KTsKKyAgICAgICAgbV9ncmFwaC5wcmVkaWN0KG1fZ3JhcGhbbm9kZUluZGV4XSwgUHJlZGljdEFy
cmF5LCBXZWFrUHJlZGljdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCB3ZWFrbHlQcmVkaWN0SW50MzIo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3JldXNhYmxlTm9k
ZVN0YWNrLmlzRW1wdHkoKSk7CiAgICAgICAgIG1fcmV1c2FibGVOb2RlU3RhY2suYXBwZW5kKCZt
X2dyYXBoW25vZGVJbmRleF0pOwpAQCAtNDU3LDE0ICs0NjMsMzcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBtX3JldXNhYmxlTm9kZVN0YWNrLmFwcGVuZCgmbV9ncmFwaFtub2RlUHRyLT5j
aGlsZDIoKV0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLnByZWRpY3QoKm5vZGVQdHIsIFByZWRpY3RJbnQzMiwg
U3RhdGljUHJlZGljdGlvbik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5wcmVkaWN0KCpub2Rl
UHRyLCBQcmVkaWN0SW50MzIsIFdlYWtQcmVkaWN0aW9uKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoIW1fcmV1c2FibGVOb2RlU3RhY2su
aXNFbXB0eSgpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBzdHJvbmdseVByZWRpY3QoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICB7CisjaWYgRU5BQkxF
KERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBt
X3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBBU1NFUlQocHJvZmlsZSk7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAg
ICAgICAgcHJpbnRmKCJEeW5hbWljIHByZWRpY3Rpb24gWyV1LCAldV06ICIsIG5vZGVJbmRleCwg
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAgICAg
cHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0
KG1ha2VQcmVkaWN0aW9uKCptX2dsb2JhbERhdGEsICpwcm9maWxlKSwgU3Ryb25nUHJlZGljdGlv
bik7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQg
c3Ryb25nbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBzdHJv
bmdseVByZWRpY3Qobm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCk7CisgICAgfQogCiAgICAgSlNH
bG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAg
ICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKIAogICAg
IC8vIFRoZSBjdXJyZW50IGJsb2NrIGJlaW5nIGdlbmVyYXRlZC4KQEAgLTU2Myw3ICs1OTIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOwogICAgICAgICAgICAgcmV0
dXJuICFtX3BhcnNlRmFpbGVkOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIC8vIFN3
aXRjaCBvbiB0aGUgY3VycmVudCBieXRlY29kZSBvcGNvZGUuCiAgICAgICAgIEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnNCZWdpbiArIG1fY3VycmVudEluZGV4
OwogICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKSkgewpAQCAtNTg3LDggKzYxNiw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKICAgICAg
ICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMSk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7Cisg
ICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHdlYWtseVBy
ZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQml0QW5kLCBvcDEsIG9wMiksIFByZWRpY3RJbnQzMik7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRhbmQpOwogICAgICAgICB9CkBAIC01OTYsOCAr
NjI1LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICBjYXNlIG9wX2JpdG9yOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQz
MihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAgICAgc3RhdGlj
YWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9w
MSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIHNl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdE9yLCBvcDEs
IG9wMiksIFByZWRpY3RJbnQzMik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iaXRvcik7
CiAgICAgICAgIH0KQEAgLTYwNSw4ICs2MzQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7CiAgICAgICAgICAgICBO
b2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihv
cDEpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAg
ICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50
MzIob3AyKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKEJpdFhvciwgb3AxLCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfYml0eG9yKTsKICAgICAgICAgfQpAQCAtNjE0LDggKzY0Myw4IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBv
cF9yc2hpZnQ6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb0ludDMyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9
IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJl
ZGljdEludDMyKG9wMik7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AxKTsKKyAg
ICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgTm9kZUluZGV4
IHJlc3VsdDsKICAgICAgICAgICAgIC8vIE9wdGltaXplIG91dCBzaGlmdHMgYnkgemVyby4KICAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQob3AyKSAmJiAhKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG9wMikgJiAweDFmKSkKQEAgLTYyOSw4ICs2NTgsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJ
bnQzMihvcDEpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAg
ICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVk
aWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAgICAgICAgICAg
ICAvLyBPcHRpbWl6ZSBvdXQgc2hpZnRzIGJ5IHplcm8uCiAgICAgICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG9wMikgJiYgISh2YWx1ZU9mSW50MzJDb25zdGFudChvcDIpICYgMHgxZikpCkBA
IC02NDQsOCArNjczLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICBjYXNlIG9wX3Vyc2hpZnQ6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEg
PSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgTm9kZUluZGV4IG9wMiA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAg
ICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICB3ZWFrbHlQcmVk
aWN0SW50MzIob3AxKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDIpOwogICAg
ICAgICAgICAgTm9kZUluZGV4IHJlc3VsdDsKICAgICAgICAgICAgIC8vIFRoZSByZXN1bHQgb2Yg
YSB6ZXJvLWV4dGVuZGluZyByaWdodCBzaGlmdCBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIHZh
bHVlLgogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0b3AgYml0IGlzIHNl
dCwgdGhlIHJlc3VsdCBpcyBub3QgaW4gdGhlIGludDMyIHJhbmdlLApAQCAtNjc1LDcgKzcwNCw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2Fz
ZSBvcF9wcmVfaW5jOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0VG9O
dW1iZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3ApOwor
ICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsKICAgICAgICAgICAgIHNldChzcmNE
c3QsIGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHJlX2luYyk7CiAgICAgICAgIH0KQEAgLTY4NCw3ICs3MTMsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5z
aWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7Ci0gICAgICAgICAgICBzdGF0
aWNhbGx5UHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihv
cCk7CiAgICAgICAgICAgICBzZXQocmVzdWx0LCBvcCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0
LCBhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3Bvc3RfaW5jKTsKQEAgLTY5Myw3ICs3MjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogewogICAgICAg
ICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7Ci0gICAgICAg
ICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRp
Y3RJbnQzMihvcCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoU3Vi
LCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9kZWMpOwogICAg
ICAgICB9CkBAIC03MDIsNyArNzMxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRU
b051bWJlcihzcmNEc3QpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcCk7
CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwogICAgICAgICAgICAgc2V0KHJl
c3VsdCwgb3ApOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0aFN1Yiwg
b3AsIG9uZSgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2RlYyk7CkBAIC03
MTcsOCArNzQ2LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgLy8gSWYgYm90aCBvcGVyYW5kcyBjYW4gc3RhdGljYWxseSBiZSBkZXRlcm1p
bmVkIHRvIHRoZSBudW1iZXJzLCB0aGVuIHRoaXMgaXMgYW4gYXJpdGhtZXRpYyBhZGQuCiAgICAg
ICAgICAgICAvLyBPdGhlcndpc2UsIHdlIG11c3QgYXNzdW1lIHRoaXMgbWF5IGJlIHBlcmZvcm1p
bmcgYSBjb25jYXRlbmF0aW9uIHRvIGEgc3RyaW5nLgogICAgICAgICAgICAgaWYgKGlzU21hbGxJ
bnQzMkNvbnN0YW50KG9wMSkgfHwgaXNTbWFsbEludDMyQ29uc3RhbnQob3AyKSkgewotICAgICAg
ICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgICAgICBz
dGF0aWNhbGx5UHJlZGljdEludDMyKG9wMik7CisgICAgICAgICAgICAgICAgd2Vha2x5UHJlZGlj
dEludDMyKG9wMSk7CisgICAgICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtvcDFdLmhhc051bWVyaWNSZXN1
bHQoKSAmJiBtX2dyYXBoW29wMl0uaGFzTnVtZXJpY1Jlc3VsdCgpKQogICAgICAgICAgICAgICAg
IHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoQWRk
LCB0b051bWJlcihvcDEpLCB0b051bWJlcihvcDIpKSk7CkBAIC03MzIsOCArNzYxLDggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMSA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKGlzU21hbGxJbnQzMkNvbnN0YW50KG9w
MSkgfHwgaXNTbWFsbEludDMyQ29uc3RhbnQob3AyKSkgewotICAgICAgICAgICAgICAgIHN0YXRp
Y2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMik7CisgICAgICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7Cisg
ICAgICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChBcml0aFN1Yiwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3N1Yik7
CkBAIC04NzgsMTEgKzkwNywxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogewogICAgICAgICAgICAgTm9kZUlu
ZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEFycmF5KGJhc2UpOwotICAgICAg
ICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CisgICAgICAgICAgICB3ZWFr
bHlQcmVkaWN0QXJyYXkoYmFzZSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIocHJv
cGVydHkpOwogCiAgICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlWYWwgPSBhZGRUb0dyYXBoKEdl
dEJ5VmFsLCBPcEluZm8oMCksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UsIHByb3BlcnR5LCBh
bGlhc2VzLmxvb2t1cEdldEJ5VmFsKGJhc2UsIHByb3BlcnR5KSk7CiAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOworICAgICAgICAgICAg
c3Ryb25nbHlQcmVkaWN0KGdldEJ5VmFsKTsKICAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0
QnlWYWwoZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfdmFs
KTsKQEAgLTg5Miw4ICs5MjIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCB2
YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IHN0YXRpY2FsbHlQcmVkaWN0QXJyYXkoYmFzZSk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJl
ZGljdEludDMyKHByb3BlcnR5KTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShiYXNl
KTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKICAgICAgICAg
ICAgIE5vZGVJbmRleCBhbGlhc2VkR2V0ID0gYWxpYXNlcy5sb29rdXBHZXRCeVZhbChiYXNlLCBw
cm9wZXJ0eSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlWYWwgPSBhZGRUb0dyYXBoKGFs
aWFzZWRHZXQgIT0gTm9Ob2RlID8gUHV0QnlWYWxBbGlhcyA6IFB1dEJ5VmFsLCBiYXNlLCBwcm9w
ZXJ0eSwgdmFsdWUpOwpAQCAtOTEyLDYgKzk0Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdl
dE1ldGhvZCA9IGFkZFRvR3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5m
byhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgZ2V0TWV0aG9kKTsKKyAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRN
ZXRob2QpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdU
SChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwpAQCAtOTI1
LDYgKzk1Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7
CisgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7CiAgICAgICAgICAgICBhbGlh
c2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9ieV9pZCk7CkBAIC0xMzUwLDcgKzEzODIsNyBAQCBib29sIHBhcnNlKEdyYXBoJiBncmFw
aCwgSlNHbG9iYWxEYXRhKiBnCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAgICAgcmV0
dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLCBncmFwaCkucGFyc2UoKTsKKyAgICByZXR1cm4gQnl0ZUNvZGVQYXJzZXIoZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIGdyYXBoKS5wYXJz
ZSgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0RyaXZlci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCeXRl
Q29kZVBhcnNlci5oIgorI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZH
UHJvcGFnYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0g
Q29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OworaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCit7Cisg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBH
cmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJz
KTsKKyAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rp
b24pCisgICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcyhjYWxsZWVBcmdzRXhlYywgY29k
ZUJsb2NrKTsKKyAgICAKKyAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2sp
OworICAgIAorICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29k
ZUJsb2NrKTsKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CisgICAg
ICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0
YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKGppdENvZGUsICpqaXRDb2RlV2l0aEFyaXR5Q2hlY2sp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjb21waWxlTW9kZSA9PSBDb21waWxlT3Ro
ZXIpOworICAgICAgICBBU1NFUlQoIWppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIAor
ICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlKGppdENvZGUpOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUpCit7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGls
ZU90aGVyLCBleGVjLCAwLCBjb2RlQmxvY2ssIGppdENvZGUsIDApOworfQorCitib29sIHRyeUNv
bXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK3sKKyAgICByZXR1cm4gY29tcGlsZShDb21w
aWxlRnVuY3Rpb24sIGV4ZWMsIGNhbGxlZUFyZ3NFeGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0RyaXZlcl9oCisjZGVm
aW5lIERGR0RyaXZlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVENv
ZGU7CitjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CisKK25hbWVzcGFjZSBERkcgeworCisj
aWYgRU5BQkxFKERGR19KSVQpCitib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2Nr
KiwgSklUQ29kZSYpOworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0
YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyNlbHNlCitpbmxpbmUgYm9vbCB0cnlD
b21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxzZTsg
fQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSos
IENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJldHVybiBm
YWxzZTsgfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NDUz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsNiArMTIxLDEwIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJ
bmRleCwgQ28KICAgICB9CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKICAgICAgICAgcHJp
bnRmKCIlcyQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuY29uc3RhbnROdW1iZXIo
KSk7CisgICAgICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jayk7CisgICAgICAgICAgICBwcmludGYo
IiA9ICVzIiwgdmFsdWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNK
dW1wKCkpIHsKQEAgLTE4NiwxNyArMTkwLDQ3IEBAIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5v
ZGVJbmRleCBvcCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVz
KEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgc2l6ZV90IG51bWJlck9m
QXJndW1lbnRzID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwg
bV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBhcmcgPSAx
OyBhcmcgPCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpIHsKLSAgICAgICAgSlNWYWx1ZSBhcmd1
bWVudFZhbHVlID0gZXhlYy0+YXJndW1lbnQoYXJnIC0gMSk7Ci0gICAgICAgIGlmIChhcmd1bWVu
dFZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmdd
Lm1fdmFsdWUgfD0gUHJlZGljdEludDMyOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVudFZhbHVl
LmlzRG91YmxlKCkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3Zh
bHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgaWYgKGV4ZWMpIHsKKyAgICAgICAgc2l6ZV90IG51
bWJlck9mQXJndW1lbnRzID0gc3RkOjptaW4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSwgbV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBudW1iZXJPZkFyZ3VtZW50czsgKythcmcpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZyAtIDEp
OworICAgICAgICAgICAgaWYgKGFyZ3VtZW50VmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAg
ICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJlZGljdEludDMyOwor
ICAgICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAg
ICAgICAgIG1fYXJndW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUgfD0gUHJlZGljdERvdWJs
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJ
T04pCisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUpOworCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID49IDEpOwor
ICAgIGZvciAoc2l6ZV90IGFyZyA9IDE7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5tX251bVBhcmFtZXRlcnMpOyArK2FyZykgeworICAgICAgICBWYWx1ZVByb2ZpbGUqIHBy
b2ZpbGUgPSBwcm9maWxlZENvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsK
KyAgICAgICAgaWYgKCFwcm9maWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
I2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiQXJndW1lbnQgcHJvZmlsZSBb
JWx1XTogIiwgYXJnKTsKKyAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRvdXQpOworICAgICAgICBw
cmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1lcmdlUHJlZGljdGlvbiht
X2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihnbG9iYWxE
YXRhLCAqcHJvZmlsZSkpOworICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAg
ICBwcmludGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fYXJn
dW1lbnRQcmVkaWN0aW9uc1thcmddLm1fdmFsdWUpKTsKKyNlbmRpZgogICAgIH0KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CisjZW5kaWYKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDggKzI4LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5j
bHVkZSA8UmVnaXN0ZXJGaWxlLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR05vZGUuaD4KKyNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJG
aWxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMTM1LDEyICsxMzYsMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gKm1fYmxvY2tzW2Jsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZUJlZ2luKV07CiAgICAgfQogCi0gICAgdm9pZCBwcmVkaWN0KGludCBvcGVyYW5k
LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAg
IGJvb2wgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVk
aWN0aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsg
bV9hcmd1bWVudFByZWRpY3Rpb25zLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50UHJlZGljdGlv
bnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlv
bihtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
KHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZVByZWRpY3Rpb25zLnNpemUoKSkgewpAQCAt
MTQ4LDM3ICsxNDgsMzcgQEAgcHVibGljOgogICAgICAgICAgICAgbV92YXJpYWJsZVByZWRpY3Rp
b25zLnJlc2l6ZShvcGVyYW5kICsgMSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1l
cmdlUHJlZGljdGlvbihtX3ZhcmlhYmxlUHJlZGljdGlvbnNbb3BlcmFuZF0ubV92YWx1ZSwgbWFr
ZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgIHJldHVybiBtZXJnZVBy
ZWRpY3Rpb24obV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVk
aWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRp
Y3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24s
IFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNp
Z25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJj
ZSBzb3VyY2UpCiAgICAgewogICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xv
dD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmZpbmQodmFyTnVtYmVy
ICsgMSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fZ2xvYmFsVmFyUHJlZGljdGlvbnMuZW5kKCkp
IHsKICAgICAgICAgICAgIFByZWRpY3Rpb25TbG90IHByZWRpY3Rpb25TbG90OwotICAgICAgICAg
ICAgbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVBy
ZWRpY3Rpb24ocHJlZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlv
biwgc291cmNlKSk7CiAgICAgICAgICAgICBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmFkZCh2YXJO
dW1iZXIgKyAxLCBwcmVkaWN0aW9uU2xvdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQu
bV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgICAgICAg
ICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0
KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBz
b3VyY2UpCisgICAgYm9vbCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5v
ZGUub3ApIHsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHByZWRpY3Qobm9k
ZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIHByZWRp
Y3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgcHJlZGljdEdsb2JhbFZh
cihub2RlLnZhck51bWJlcigpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51bWJlcigp
LCBwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNh
c2UgR2V0TWV0aG9kOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIENhbGw6
CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgbm9kZS5wcmVkaWN0KHByZWRp
Y3Rpb24sIHNvdXJjZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rp
b24sIHNvdXJjZSk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI2LDEyICsyMjYs
NDMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwogICAgICAgICB9
CiAgICAgfQorICAgIAorICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBj
b25zdGFudHMuCisgICAgYm9vbCBpc0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgfQorICAg
IGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYXQobm9kZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgfQorICAgIGJvb2wgaXNJbnQz
MkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9j
ayk7CisgICAgfQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5k
ZXgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgLy8gSGVscGVyIG1l
dGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgorICAgIEpTVmFsdWUgdmFsdWVP
ZkpTQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2spOworICAgIH0KKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KENvZGVCbG9j
ayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF0KG5vZGVJbmRleCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9Cisg
ICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZh
bHVlT2ZEb3VibGVDb25zdGFudChjb2RlQmxvY2spOworICAgIH0KIAogI2lmbmRlZiBOREVCVUcK
ICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICNlbmRpZgogCi0gICAg
dm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHByZWRpY3RB
cmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwogCiAgICAgVmVjdG9yPCBPd25Q
dHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4g
bV92YXJBcmdDaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTMsNiArOTEzLDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5m
by5pc0NhbGwgPSBtX2pzQ2FsbHNbaV0ubV9pc0NhbGw7CisgICAgICAgIGluZm8uaXNERkcgPSB0
cnVlOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVs
KGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCkpOwogICAgICAg
ICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2pzQ2FsbHNbaV0u
bV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDUzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjA3LDM5ICsyMDcsMTQgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEhlbHBl
ciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0
YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtu
b2RlSW5kZXhdLmlzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9k
ZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBncmFwaCgpW25vZGVJbmRl
eF0uaXNDb25zdGFudCgpOwotICAgIH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25zdGFudChub2RlSW5k
ZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpOwotICAgIH0KLSAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpLmlzTnVtYmVyKCk7Ci0gICAgfQorICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQor
ICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBo
KCkuaXNKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSW50MzJDb25zdGFudChjb2Rl
QmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2Nr
KCksIG5vZGVJbmRleCk7IH0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyBnZXQgY29uc3RhbnQgdmFs
dWVzIGZyb20gbm9kZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgp
KTsKLSAgICAgICAgdW5zaWduZWQgY29uc3RhbnRJbmRleCA9IGdyYXBoKClbbm9kZUluZGV4XS5j
b25zdGFudE51bWJlcigpOwotICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmNvbnN0YW50UmVn
aXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudEluZGV4KS5nZXQoKTsK
LSAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOwot
ICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkudW5jaGVja2VkR2V0
TnVtYmVyKCk7Ci0gICAgfQorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4
IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2so
KSwgbm9kZUluZGV4KTsgfQorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUlu
ZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChjb2Rl
QmxvY2soKSwgbm9kZUluZGV4KTsgfQorICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS52YWx1ZU9mRG91YmxlQ29uc3Rh
bnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgSklU
IGdlbmVyYXRlIGR5bmFtaWMsIGRlYnVnLW9ubHkgY2hlY2tzIC0gYWtpbiB0byBBU1NFUlRzLgog
I2lmIERGR19KSVRfQVNTRVJUCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
VmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC0xOTUsMTQgKzE5OCwxNSBAQCBzdGF0aWMgY29uc3QgUHJl
ZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgCiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0SW50MzIgID0gMHgwNDsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3REb3Vi
bGUgPSAweDA4Owogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE51bWJlciA9IDB4
MGM7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBEeW5hbWljUHJlZGljdGlvblRhZyA9IDB4
ODA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgID0gMHgwZjsKK3N0
YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rpb25UYWcgPSAweDgwOwogc3Rh
dGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwOwogCi1l
bnVtIFByZWRpY3Rpb25Tb3VyY2UgeyBTdGF0aWNQcmVkaWN0aW9uLCBEeW5hbWljUHJlZGljdGlv
biB9OworZW51bSBQcmVkaWN0aW9uU291cmNlIHsgV2Vha1ByZWRpY3Rpb24sIFN0cm9uZ1ByZWRp
Y3Rpb24gfTsKIAogaW5saW5lIGJvb2wgaXNDZWxsUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZh
bHVlKQogewotICAgIHJldHVybiAodmFsdWUgJiBQcmVkaWN0Q2VsbCkgPT0gUHJlZGljdENlbGwg
JiYgISh2YWx1ZSAmIH5QcmVkaWN0QXJyYXkpOworICAgIHJldHVybiAodmFsdWUgJiBQcmVkaWN0
Q2VsbCkgPT0gUHJlZGljdENlbGwgJiYgISh2YWx1ZSAmIH4oUHJlZGljdEFycmF5IHwgUHJlZGlj
dGlvblRhZ01hc2spKTsKIH0KIAogaW5saW5lIGJvb2wgaXNBcnJheVByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSB2YWx1ZSkKQEAgLTIyMiw2MCArMjI2LDEwNyBAQCBpbmxpbmUgYm9vbCBpc0RvdWJs
ZVByZWRpY3Rpb24oUHJlZGljdGVkCiAKIGlubGluZSBib29sIGlzTnVtYmVyUHJlZGljdGlvbihQ
cmVkaWN0ZWRUeXBlIHZhbHVlKQogewotICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1i
ZXIpICYmICEodmFsdWUgJiB+UHJlZGljdE51bWJlcik7CisgICAgcmV0dXJuICEhKHZhbHVlICYg
UHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25U
YWdNYXNrKSk7CiB9CiAKLWlubGluZSBib29sIGlzRHluYW1pY1ByZWRpY3Rpb24oUHJlZGljdGVk
VHlwZSB2YWx1ZSkKK2lubGluZSBib29sIGlzU3Ryb25nUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSAhPSAoUHJlZGljdE5vbmUgfCBEeW5hbWljUHJl
ZGljdGlvblRhZykpOwotICAgIHJldHVybiAhISh2YWx1ZSAmIER5bmFtaWNQcmVkaWN0aW9uVGFn
KTsKKyAgICBBU1NFUlQodmFsdWUgIT0gKFByZWRpY3ROb25lIHwgU3Ryb25nUHJlZGljdGlvblRh
ZykpOworICAgIHJldHVybiAhISh2YWx1ZSAmIFN0cm9uZ1ByZWRpY3Rpb25UYWcpOwogfQogCisj
aWZuZGVmIE5ERUJVRworaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVk
aWN0ZWRUeXBlIHZhbHVlKQoreworICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24odmFsdWUpKSB7
CisgICAgICAgIHN3aXRjaCAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spIHsKKyAgICAgICAg
Y2FzZSBQcmVkaWN0Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYm90dG9tIjsK
KyAgICAgICAgY2FzZSBQcmVkaWN0Q2VsbDoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmct
Y2VsbCI7CisgICAgICAgIGNhc2UgUHJlZGljdEFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy1hcnJheSI7CisgICAgICAgIGNhc2UgUHJlZGljdEludDMyOgorICAgICAgICAgICAg
cmV0dXJuICJwLXN0cm9uZy1pbnQzMiI7CisgICAgICAgIGNhc2UgUHJlZGljdE51bWJlcjoKKyAg
ICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiAicC1zdHJvbmctdG9wIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBz
d2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSBQcmVkaWN0Tm9uZToKKyAgICAgICAgcmV0dXJuICJw
LXdlYWstYm90dG9tIjsKKyAgICBjYXNlIFByZWRpY3RDZWxsOgorICAgICAgICByZXR1cm4gInAt
d2Vhay1jZWxsIjsKKyAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgcmV0dXJuICJwLXdl
YWstYXJyYXkiOworICAgIGNhc2UgUHJlZGljdEludDMyOgorICAgICAgICByZXR1cm4gInAtd2Vh
ay1pbnQzMiI7CisgICAgY2FzZSBQcmVkaWN0TnVtYmVyOgorICAgICAgICByZXR1cm4gInAtd2Vh
ay1udW1iZXIiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAicC13ZWFrLXRvcCI7Cisg
ICAgfQorfQorI2VuZGlmCisKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1lcmdlUHJlZGljdGlvbnMo
UHJlZGljdGVkVHlwZSBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGlmIChpc0R5
bmFtaWNQcmVkaWN0aW9uKGxlZnQpID09IGlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQpKQorICAg
IGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgPT0gaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0
KSkKICAgICAgICAgcmV0dXJuIGxlZnQgfCByaWdodDsKLSAgICBpZiAoaXNEeW5hbWljUHJlZGlj
dGlvbihsZWZ0KSkgewotICAgICAgICBBU1NFUlQoIWlzRHluYW1pY1ByZWRpY3Rpb24ocmlnaHQp
KTsKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKSB7CisgICAgICAgIEFTU0VSVCgh
aXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSk7CiAgICAgICAgIHJldHVybiBsZWZ0OwogICAgIH0K
LSAgICBBU1NFUlQoIWlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkpOwotICAgIEFTU0VSVChpc0R5
bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgQVNTRVJUKCFpc1N0cm9uZ1ByZWRpY3Rpb24o
bGVmdCkpOworICAgIEFTU0VSVChpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKICAgICByZXR1
cm4gcmlnaHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBtZXJnZVBy
ZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKK2lubGluZSBib29sIG1lcmdl
UHJlZGljdGlvbihUJiBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGxlZnQgPSBz
dGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+
KGxlZnQpLCByaWdodCkpOworICAgIFByZWRpY3RlZFR5cGUgbmV3UHJlZGljdGlvbiA9IHN0YXRp
Y19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMoc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obGVm
dCksIHJpZ2h0KSk7CisgICAgYm9vbCByZXN1bHQgPSBuZXdQcmVkaWN0aW9uICE9IHN0YXRpY19j
YXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpOworICAgIGxlZnQgPSBuZXdQcmVkaWN0aW9uOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiB7Ci0gICAgQVNT
RVJUKCEodHlwZSAmIER5bmFtaWNQcmVkaWN0aW9uVGFnKSk7Ci0gICAgQVNTRVJUKHNvdXJjZSA9
PSBEeW5hbWljUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gU3RhdGljUHJlZGljdGlvbik7CisgICAg
QVNTRVJUKCEodHlwZSAmIFN0cm9uZ1ByZWRpY3Rpb25UYWcpKTsKKyAgICBBU1NFUlQoc291cmNl
ID09IFN0cm9uZ1ByZWRpY3Rpb24gfHwgc291cmNlID09IFdlYWtQcmVkaWN0aW9uKTsKICAgICBp
ZiAodHlwZSA9PSBQcmVkaWN0Tm9uZSkKICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAg
IHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlvbiA/IER5bmFtaWNQcmVk
aWN0aW9uVGFnIDogMCk7CisgICAgcmV0dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRp
Y3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9uVGFnIDogMCk7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1p
bmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUp
CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQoraW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVBy
ZWRpY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBWYWx1ZVByb2ZpbGUmIHBy
b2ZpbGUpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0g
ICAgICAgIHJldHVybiAicC1ib3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAg
IHJldHVybiAicC1jZWxsIjsKLSAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgcmV0dXJu
ICJwLWFycmF5IjsKLSAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJwLWlu
dDMyIjsKLSAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC1udW1iZXIi
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC10b3AiOwotICAgIH0KKyAgICBWYWx1
ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3RhdGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0
aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRpc3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGlj
cy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0
YXRpc3RpY3MuaW50MzJzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0
cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0SW50MzI7CisgICAgCisgICAgaWYgKHN0YXRpc3Rp
Y3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdERvdWJsZTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5p
bnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAg
ICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisgICAg
aWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0
dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0QXJyYXk7CisgICAgCisgICAgaWYgKHN0
YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ry
b25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RDZWxsOworICAgIAorICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdFRvcDsKIH0KICNlbmRpZgogCkBAIC0zNTYsNiArNDA3LDMz
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7CiAgICAgICAg
IHJldHVybiBtX29wSW5mbzsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBjb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFu
dE51bWJlcigpKS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNJbnQzMigpOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgewor
ICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9j
aykuaXNOdW1iZXIoKTsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludDMy
Q29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2spLmFzSW50MzIoKTsKKyAgICB9CisKKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNv
bnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRG91
YmxlQ29uc3RhbnQoY29kZUJsb2NrKSk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIH0KIAogICAgIGJvb2wgaGFz
TG9jYWwoKQogICAgIHsKQEAgLTQ3MCwyNCArNTQ4LDI3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KG1fb3BJbmZvMik7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rp
b25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1By
ZWRpY3Rpb24oKSk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBoYXZlIHByZXZpb3VzbHkgZm91
bmQgZW1waXJpY2FsbHkgdGhhdCBhc2NyaWJpbmcgc3RhdGljIHByZWRpY3Rpb25zCiAgICAgICAg
IC8vIHRvIGhlYXAgbG9hZHMgYXMgd2VsbCBhcyBjYWxscyBpcyBub3QgcHJvZml0YWJsZSwgYXMg
dGhlc2UgcHJlZGljdGlvbnMKICAgICAgICAgLy8gYXJlIHdyb25nIHRvbyBvZnRlbi4gSGVuY2Us
IHRoaXMgY29tcGxldGVseSBpZ25vcmVzIHN0YXRpYyBwcmVkaWN0aW9ucy4KLSAgICAgICAgaWYg
KHNvdXJjZSA9PSBTdGF0aWNQcmVkaWN0aW9uKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoc291cmNlID09IFdlYWtQcmVkaWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAg
ICAgICBBU1NFUlQoc291cmNlID09IER5bmFtaWNQcmVkaWN0aW9uKTsKKyAgICAgICAgQVNTRVJU
KHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uKTsKICAgICAgICAgCi0gICAgICAgIG1fb3BJbmZv
MiB8PSBEeW5hbWljUHJlZGljdGlvblRhZyB8IHByZWRpY3Rpb247CisgICAgICAgIFByZWRpY3Rl
ZFR5cGUgbmV3UHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOwor
ICAgICAgICBib29sIHJlc3VsdCA9IG1fb3BJbmZvMiAhPSBuZXdQcmVkaWN0aW9uOworICAgICAg
ICBtX29wSW5mbzIgfD0gbmV3UHJlZGljdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9Ci0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJvcGFnYXRvci5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpICYmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUHJv
cGFnYXRvciB7CitwdWJsaWM6CisgICAgUHJvcGFnYXRvcihHcmFwaCYgZ3JhcGgsIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaykKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fZ2xvYmFsRGF0
YShnbG9iYWxEYXRhKQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAg
LCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICB7CisgICAgICAgIG1fcHJlZGlj
dGlvbnMucmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaSA9
IDA7IGkgPCBtX2dyYXBoLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9wcmVkaWN0aW9uc1tp
XSA9IFByZWRpY3ROb25lOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpeHBvaW50KCkKKyAgICB7
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9w
dGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCisgICAgICAgICAgICAvLyBE
RlMtc29ydGVkIGNvZGUuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBCYWNrd2Fy
ZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNv
ZGUgd2lsbAorICAgICAgICAgICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5
IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBmbG93LgorICAgICAgICAgICAgLy8gVGhp
cyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQg
Zml4cG9pbnQKKyAgICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBz
aG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgICAgICBwcm9wYWdhdGVCYWNrd2FyZCgpOworICAgICAgICAgICAgaWYgKCFt
X2NoYW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIERvIGFub3RoZXIgZm9yd2FyZCBwYXNzIGJlY2F1c2UgZm9yd2FyZCBwYXNzZXMgYXJl
IG9uIGF2ZXJhZ2UgbW9yZQorICAgICAgICAgICAgLy8gcHJvZml0YWJsZS4KKyAgICAgICAgICAg
IG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOworICAg
ICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9p
ZCBzZXRQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAg
IGlmIChtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSA9PSBwcmVkaWN0aW9uKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJ
bmRleF0gPSBwcmVkaWN0aW9uOworICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG1lcmdlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisg
ICAgeworICAgICAgICBpZiAoREZHOjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2Nv
bXBpbGVJbmRleF0sIHByZWRpY3Rpb24pKQorICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVOb2RlKE5vZGUmIG5vZGUpCisgICAgewor
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKKyAgICAgICAgc3dpdGNo
IChvcCkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtl
UHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlv
bihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXko
Jm1fZ2xvYmFsRGF0YSwgY2VsbCkpCisgICAgICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdEFycmF5LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVk
aWN0aW9uKFByZWRpY3RDZWxsLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RU
b3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uID0gbV9ncmFwaC5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7
CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAg
ICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3JhcGgucHJlZGljdChub2RlLmxvY2FsKCksIG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRp
Y3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRY
b3I6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAg
ICAgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAg
ICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAgICAg
ICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24gPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRpY3Rpb24pKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3ROdW1iZXIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1
ZUFkZDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tu
b2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRp
Y3Rpb25zW25vZGUuY2hpbGQyKCldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNT
dHJvbmdQcmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJl
ZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0
aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9u
Z1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1
YjoKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBs
ZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJl
ZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24o
bWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpKQorICAgICAgICAgICAgICAgICAgICBtZXJn
ZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNz
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXJFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZVN0
cmljdEVxOgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgc2FkLCBhcyB3ZSBkb24ndCBoYXZlIGEgYm9vbGVhbiBwcmVkaWN0aW9uLCBldmVuIHRob3Vn
aCB3ZSBlYXNpbHkKKyAgICAgICAgICAgIC8vIGNvdWxkLgorICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0
QnlJZDoKKyAgICAgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAg
IGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpKQorICAgICAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnZlcnRUaGlz
OiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RDZWxs
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2dyYXBoLmdldEdsb2JhbFZhclByZWRpY3Rpb24obm9k
ZS52YXJOdW1iZXIoKSk7CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRp
Y3Rpb24pKQorICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3RH
bG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXSAm
IH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBU
aGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgorICAg
ICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAg
IGNhc2UgREZHOjpKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1
cm46CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogor
ICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CisgICAgICAgIGNhc2UgUGhpOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQg
YmVjYXVzZSB3ZSBkb24ndCBoYXZlIHByb2ZpbGluZyBmb3IgdGhlbSwgeWV0LgorICAgICAgICBj
YXNlIFJlc29sdmU6CisgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2U6CisgICAgICAgIGNhc2UgUmVz
b2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlRm9yd2Fy
ZCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiUHJvcGFn
YXRpbmcgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIGZvciAo
bV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21f
Y29tcGlsZUluZGV4KQorICAgICAgICAgICAgcHJvcGFnYXRlTm9kZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQorICAg
IHsKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIlByb3BhZ2F0aW5nIGJh
Y2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBp
bGVJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOyBtX2NvbXBpbGVJbmRleC0tID4gMDspCisgICAgICAg
ICAgICBwcm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICB9CisgICAg
CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7Cisg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9j
azsKKyAgICAKKyAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CisgICAgCisgICAgVmVjdG9y
PFByZWRpY3RlZFR5cGUsIDE2PiBtX3ByZWRpY3Rpb25zOworCisjaWYgREZHX0RFQlVHX1ZFUkJP
U0UKKyAgICB1bnNpZ25lZCBtX2NvdW50OworI2VuZGlmCisgICAgCisgICAgYm9vbCBtX2NoYW5n
ZWQ7Cit9OworCit2b2lkIHByb3BhZ2F0ZShHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
OworICAgIEFTU0VSVChwcm9maWxlZEJsb2NrKTsKKyAgICAKKyAgICBQcm9wYWdhdG9yIHByb3Bh
Z2F0b3IoZ3JhcGgsICpnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIHByb2ZpbGVkQmxvY2spOworICAg
IHByb3BhZ2F0b3IuZml4cG9pbnQoKTsKKyAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAg
IGdyYXBoLmR1bXAoY29kZUJsb2NrKTsKKyNlbmRpZgorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkgJiYgRU5BQkxFKERZTkFNSUNfT1BU
SU1JWkFUSU9OKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGFnYXRvcl9oCisjZGVm
aW5lIERGR1Byb3BhZ2F0b3JfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDxk
ZmcvREZHR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2Ns
YXNzIEpTR2xvYmFsRGF0YTsKKworbmFtZXNwYWNlIERGRyB7CisKKy8vIFByb3BhZ2F0ZSBkeW5h
bWljIHByZWRpY3Rpb25zIGZyb20gdmFsdWUgc291cmNlcyB0byB2YXJpYWJsZXMuCisjaWYgRU5B
QkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQordm9pZCBwcm9wYWdhdGUoR3JhcGgmLCBKU0dsb2Jh
bERhdGEqLCBDb2RlQmxvY2sqKTsKKyNlbHNlCitpbmxpbmUgdm9pZCBwcm9wYWdhdGUoR3JhcGgm
LCBKU0dsb2JhbERhdGEqLCBDb2RlQmxvY2sqKSB7IH0KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw5
IEBAIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICAgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxs
ZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbExpbmtJbmZvLmhv
dFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsK
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlciwg
Y29kZVB0cik7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAg
ICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKCZjYWxsTGlua0luZm8pOwog
ICAgIH0KICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
OCw2ICsyMTgsOCBAQCBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9kZShIYW5kbGVIZWFwCiAg
ICAgOiBtX2hhbmRsZUhlYXAoaGFuZGxlSGVhcCkKICAgICAsIG1fd2Vha093bmVyKDApCiAgICAg
LCBtX3dlYWtPd25lckNvbnRleHQoMCkKKyAgICAsIG1fcHJldigwKQorICAgICwgbV9uZXh0KDAp
CiB7CiB9CiAKQEAgLTIyNSw2ICsyMjcsOCBAQCBpbmxpbmUgSGFuZGxlSGVhcDo6Tm9kZTo6Tm9k
ZShXVEY6OlNlbnRpCiAgICAgOiBtX2hhbmRsZUhlYXAoMCkKICAgICAsIG1fd2Vha093bmVyKDAp
CiAgICAgLCBtX3dlYWtPd25lckNvbnRleHQoMCkKKyAgICAsIG1fcHJldigwKQorICAgICwgbV9u
ZXh0KDApCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw2ICs5MywxNiBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IENvZGVCCiB7CiB9CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQordm9pZCBKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25DaGVja0tpbmQga2luZCkKK3sKKyAg
ICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyQWJzb2x1dGUoU2lnbmVkLCBUcnVzdGVk
SW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyAxIDogMzApLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1fY29kZUJsb2NrLT5tX2V4ZWN1dGVDb3VudGVyKSk7CisgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywga2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBjdGlfb3B0aW1p
emVfZnJvbV9sb29wIDogY3RpX29wdGltaXplX2Zyb21fcmV0KTsKKyAgICBzdHViQ2FsbC5jYWxs
KCk7CisgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7Cit9CisjZW5kaWYKKwogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiB7CkBAIC0xMDIsNiAr
MTEyLDggQEAgdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQogICAgIHN0dWJDYWxsLmNhbGwo
dGltZW91dENoZWNrUmVnaXN0ZXIpOwogICAgIHN0dWJDYWxsLmdldEFyZ3VtZW50KDAsIHJlZ1Qx
LCByZWdUMCk7IC8vIHJlbG9hZCBsYXN0IHJlc3VsdCByZWdpc3RlcnMuCiAgICAgc2tpcFRpbWVv
dXQubGluayh0aGlzKTsKKyAgICAKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGlt
aXphdGlvbkNoZWNrKTsKIH0KICNlbHNlCiB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCkBA
IC0xMTEsNiArMTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQogICAgIHNraXBU
aW1lb3V0LmxpbmsodGhpcyk7CiAKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisgICAg
CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7CiB9CiAj
ZW5kaWYKIApAQCAtNjIzLDcgKzYzNyw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShD
b2RlUHRyKiBmdW4KIAogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7Ci0KKyAgICAK
ICAgICByZXR1cm4gSklUQ29kZShwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6
QmFzZWxpbmVKSVQpOwogfQogCkBAIC02MzcsNiArNjUxLDkgQEAgdm9pZCBKSVQ6OmxpbmtGb3Io
SlNGdW5jdGlvbiogY2FsbGVlLCBDbwogICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNM
aW5rZWQoKSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCgqZ2xvYmFsRGF0YSwg
Y2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+aG90UGF0aE90aGVyLCBjb2RlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsZWVDb2Rl
QmxvY2spCisgICAgICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2Fs
bExpbmtJbmZvKTsKICAgICB9CiAKICAgICAvLyBwYXRjaCB0aGUgY2FsbCBzbyB3ZSBkbyBub3Qg
Y29udGludWUgdG8gdHJ5IHRvIGxpbmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcyLDYgKzk3MiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8g
TG9hZHMgdGhlIGNoYXJhY3RlciB2YWx1ZSBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nIGlu
dG8gZHN0LgogICAgICAgICB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsKICAgICAgICAgCisgICAg
ICAgIGVudW0gT3B0aW1pemF0aW9uQ2hlY2tLaW5kIHsgTG9vcE9wdGltaXphdGlvbkNoZWNrLCBS
ZXRPcHRpbWl6YXRpb25DaGVjayB9OworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisg
ICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2luZCk7
CisjZWxzZQorICAgICAgICB2b2lkIGVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25D
aGVja0tpbmQpIHsgfQorI2VuZGlmCisgICAgICAgIAogICAgICAgICB2b2lkIGVtaXRUaW1lb3V0
Q2hlY2soKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJh
bmRUeXBlcyh1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNiArMTA2LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxWYXJhcmdzU2xvd0Nhc2Uo
SQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOwor
ICAgIAogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAKICAgICBlbWl0TG9hZChkc3QsIHJlZ1QxLCByZWdUMCk7CkBAIC0xMTgsNiArMTIwLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXRfb2JqZWN0X29yX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAg
IAogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgdGhpc1JlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiA5NDUzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyMyArMjcsNTAgQEAKICNkZWZpbmUgSklUQ29kZV9oCiAKICNpZiBFTkFCTEUoSklUKQot
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlByb2ZpbGVyLmgiCisjZW5kaWYK
IAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIGNsYXNzIEpTR2xvYmFs
RGF0YTsKICAgICBjbGFzcyBSZWdpc3RlckZpbGU7CisjZW5kaWYKICAgICAKICAgICBjbGFzcyBK
SVRDb2RlIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBDb2RlUmVmOwogICAgICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBD
b2RlUHRyOworI2Vsc2UKKyAgICAgICAgSklUQ29kZSgpIHsgfQorI2VuZGlmCiAgICAgcHVibGlj
OgogICAgICAgICBlbnVtIEpJVFR5cGUgeyBIb3N0Q2FsbFRodW5rLCBCYXNlbGluZUpJVCwgREZH
SklUIH07Ci0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQo
KQorICAgICAgICB7CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgICAg
IHJldHVybiBCYXNlbGluZUpJVDsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4gREZHSklUOwor
I2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBlIHRvcFRp
ZXJKSVQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gREZHSklUOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSklUVHlwZSBuZXh0VGllckpJVChKSVRUeXBlIGpp
dFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaml0VHlwZSwgaml0
VHlwZSA9PSBCYXNlbGluZUpJVCB8fCBqaXRUeXBlID09IERGR0pJVCk7CisgICAgICAgICAgICBy
ZXR1cm4gREZHSklUOworICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCiAgICAg
ICAgIEpJVENvZGUoKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTUzLDcgKzgwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7
CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAgYm9vbCBvcGVyYXRvciAhKCkgY29uc3QK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICFtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKQEAgLTEyNCwxMCArMTUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
Q29kZVJlZiBtX3JlZjsKICAgICAgICAgSklUVHlwZSBtX2ppdFR5cGU7CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKICAgICB9OwogCiB9OwogCiAjZW5kaWYKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUyLDYgKzQ1Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhJbnMK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsKKyAg
ICAKICAgICBBU1NFUlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0gcmVnVDEpOwogICAgIEFTU0VSVChy
ZWdUMSAhPSByZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVSZWdp
c3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC00NzIsNiArNDc0LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXRf
b2JqZWN0X29yX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBl
bWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAogICAgIEFT
U0VSVChjYWxsRnJhbWVSZWdpc3RlciAhPSByZWdUMSk7CiAgICAgQVNTRVJUKHJlZ1QxICE9IHJl
dHVyblZhbHVlUmVnaXN0ZXIpOwogICAgIEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVyICE9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE2LDYgKzE4MTYsMzIgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfY2hlY2tfaGFzXwogICAgIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9F
TkQoKTsKIH0KIAorREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9sb29w
KQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICAKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworCisgICAgSlNPYmplY3Qq
IGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFp
bik7CisgICAgaWYgKGVycm9yKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9w
dGltaXplZCBjb21waWxhdGlvbiBmcm9tIGxvb3AgZmFpbGVkLlxuIik7Cit9CisKK0RFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb21fcmV0KQoreworICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKyAgICAKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxG
cmFtZS0+c2NvcGVDaGFpbigpOworCisgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5j
b21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7CisgICAgaWYgKGVycm9yKQor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBm
cm9tIHJldCBmYWlsZWQuXG4iKTsKK30KKwogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wX2luc3RhbmNlb2YpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24g
OTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyMyw2ICs0MjMsOCBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9TVFVC
IGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKFNUVUJfQVJHU19ERUNMQVJB
VElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3B0aW1pemVfZnJv
bV9sb29wKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3B0
aW1pemVfZnJvbV9yZXQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RV
QiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9p
ZCogSklUX1NUVUIgY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrKFNUVUJfQVJHU19ERUNMQVJB
VElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3RpX29wX2NhbGxfaml0Q29tcGlsZShTVFVCX0FS
R1NfREVDTEFSQVRJT04pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDY2ICsyOCwxNiBA
QAogCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJQ
YXJzZXIuaCIKICNpbmNsdWRlICJVU3RyaW5nQnVpbGRlci5oIgogI2luY2x1ZGUgIlZlY3Rvci5o
IgogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0jaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIK
LSNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0Mgewog
CiBjb25zdCBDbGFzc0luZm8gRXhlY3V0YWJsZUJhc2U6OnNfaW5mbyA9IHsgIkV4ZWN1dGFibGUi
LCAwLCAwLCAwIH07CiAKLSNpZiBFTkFCTEUoSklUKQotI2lmIEVOQUJMRShERkdfSklUKQotc3Rh
dGljIGJvb2wgdHJ5REZHQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRDb2RlJiBqaXRDb2RlKQotewotI2lmIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9O
UykKLSAgICAvLyBGSVhNRTogTm8gZmxvdyBjb250cm9sIHlldCBzdXBwb3J0ZWQsIGRvbid0IGJv
dGhlciBzY2FubmluZyB0aGUgYnl0ZWNvZGUgaWYgdGhlcmUgYXJlIGFueSBqdW1wIHRhcmdldHMu
Ci0gICAgaWYgKGNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQotCi0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBERkc6
OkdyYXBoIGRmZyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZh
cnMpOwotICAgIGlmICghcGFyc2UoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBERkc6OkpJVENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2Jh
bERhdGEsIGRmZywgY29kZUJsb2NrKTsKLSAgICBkYXRhRmxvd0pJVC5jb21waWxlKGppdENvZGUp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spCi17Ci0jaWYgRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQot
ICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wgeWV0IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVy
IHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVyZSBhcmUgYW55IGp1bXAgdGFyZ2V0cy4KLSAg
ICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0KLSAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIERGRzo6R3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChjYWxsZWVBcmdzRXhlYykKLSAgICAgICAgZGZnLnByZWRp
Y3RBcmd1bWVudFR5cGVzKGNhbGxlZUFyZ3NFeGVjKTsKLQotICAgIERGRzo6SklUQ29tcGlsZXIg
ZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFGbG93SklU
LmNvbXBpbGVGdW5jdGlvbihqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgIHJl
dHVybiB0cnVlOwotfQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCB0cnlE
RkdDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKSB7IHJldHVybiBmYWxz
ZTsgfQotc3RhdGljIGJvb2wgdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNT
dGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKSB7IHJl
dHVybiBmYWxzZTsgfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0gICAgCiB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUoKQogewogI2lmIEVO
QUJMRShKSVQpCkBAIC0xNjYsOCArMTE2LDE4IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKEUKIHsKIH0KIAorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQoreworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7
CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAw
OworICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BU
aWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hh
aW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2V2YWxDb2RlQmxvY2stPmdldEpJVFR5cGUo
KSkpOworICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7CisgICAgcmV0dXJuIGVycm9yOwor
fQogCi1KU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBFdmFsRXhl
Y3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgSlNPYmpl
Y3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKQEAgLTE4MywyNiArMTQzLDQxIEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0
YWJsZTo6Y29tcGlsZUludGVybmEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2V2
YWxDb2RlQmxvY2spOwotICAgIG1fZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29k
ZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFp
bk5vZGUtPmxvY2FsRGVwdGgoKSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwgc2Nv
cGVDaGFpbk5vZGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJs
b2NrLmdldCgpKSkpOworICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0g
bV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fZXZhbENv
ZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVjdCwg
c291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFpbk5vZGUtPmxvY2FsRGVwdGgoKSwgcHJldmlv
dXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBn
ZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdldCgpLCBz
Y29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2Rl
QmxvY2suZ2V0KCksICEhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVH
ZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJz
dENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0
ZSgpKSkgewotICAgICAgICBtX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgbV9ldmFs
Q29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2Rl
QmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgZXZhbE5vZGUtPmRlc3Ryb3lE
YXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQogCiAgICAgZXZhbE5vZGUt
PmRlc3Ryb3lEYXRhKCk7CisgICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5h
dGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNh
blVzZUpJVCgpKSB7Ci0gICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4
ZWMsIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGlm
ICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGls
ZWQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENv
ZGVGb3JDYWxsKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKQorICAgICAgICAgICAgQVNTRVJU
KCFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgfHwgIW1fZXZhbENvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aGFzSW5jb21pbmdDYWxscygpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpZiAobV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlcmUgaXMgYWxyZWFkeSBhbiBhbHRlcm5hdGl2ZSBwaWVjZSBvZiBjb2RlIGNvbXBp
bGVkIHdpdGggYSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQsIHNvIHdlIGNhbiBz
aWxlbnRseSBmYWlsLgorICAgICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJu
YXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kb250T3B0aW1pemVB
bnl0aW1lU29vbigpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9k
ZS0+Z2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgfQogI2lmICFF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpk
dW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jay0+ZGlzY2Fy
ZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5zZXRKSVRDb2Rl
KG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAjZW5k
aWYKIApAQCAtMjYxLDEwICsyMzYsMTkgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpj
aGVja1N5bnRheAogICAgIHJldHVybiBleGNlcHRpb247CiB9CiAKLUpTT2JqZWN0KiBQcm9ncmFt
RXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlKQorSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQogewotICAgIEFTU0VSVCghbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fcHJvZ3Jh
bUNvZGVCbG9jayk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBpZiAobV9wcm9ncmFt
Q29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAg
ICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6
bmV4dFRpZXJKSVQobV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NF
UlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIHJldHVybiBlcnJvcjsKK30KIAorSlNPYmpl
Y3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
K3sKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMjc3LDI1ICsy
NjEsNDAgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmpl
Y3QuZ2V0KCk7CiAgICAgCi0gICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFBy
b2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5w
cm92aWRlcigpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRv
cHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWlu
Tm9kZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdl
dCgpKSkpOworICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9wcm9n
cmFtQ29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6
Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fcHJvZ3JhbUNv
ZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUs
IGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVs
ZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9k
ZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgp
LCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9y
OjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxh
dGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsK
LSAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgICAgIG1fcHJvZ3JhbUNv
ZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFt
Q29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIHByb2dyYW1Ob2RlLT5k
ZXN0cm95RGF0YSgpOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KIAogICAgIHBy
b2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOworICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+Y29weURh
dGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmds
b2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gdHJ5
REZHQ29tcGlsZShleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNh
bGwpOwotICAgICAgICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVk
ID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAg
ICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0cnlDb21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVC
bG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7CisgICAgICAgIGlmIChkZmdDb21waWxlZCkg
eworICAgICAgICAgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAg
ICAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlua0lu
Y29taW5nQ2FsbHMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX3Byb2dy
YW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2dyYW1D
b2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3Jh
bUNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgICAgIG1fcHJv
Z3JhbUNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwg
PSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVC
bG9jay5nZXQoKSk7CisgICAgICAgIH0KICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAg
ICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAg
ICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmRpc2NhcmRCeXRlY29kZSgpOwogI2VuZGlmCisg
ICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTM0Miw3ICszNDEs
MjkgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKICAgICBCYXNlOjpjbGVh
ckNvZGUoKTsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNh
bGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQoreworICAgIEFT
U0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJU
KCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAgIGlm
IChtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklU
KCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNo
YWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxs
KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5k
eW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIGVy
cm9yID0gY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBK
SVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgp
KSk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBl
cnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwg
RXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogewog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwpAQCAtMzU4LDExICszNzksMTIgQEAgSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAK
LSAgICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAgbV9jb2RlQmxvY2tGb3JDYWxs
ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBm
YWxzZSkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRy
KG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9jb2Rl
QmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpKSk7
CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2NvZGVCbG9ja0Zv
ckNhbGwucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21U
aWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxs
ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBm
YWxzZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2Rl
R2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHku
Z2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCks
IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgISFtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0
aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNv
ZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBn
ZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVh
cigpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1
bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNhbGwtPnJlbGVhc2VBbHRlcm5hdGl2ZSgp
KTsKICAgICAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bjsKICAgICB9CkBAIC0zNzMsMTcgKzM5NSwzMSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yCiAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+
c2hhcmVkU3ltYm9sVGFibGUoKTsKIAogICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9j
b2RlQmxvY2tGb3JDYWxsLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAg
IGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlRnVuY3Rpb24oZXhlYywgY2FsbGVlQXJn
c0V4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxlZCkKKyAg
ICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAgICBpZiAoaml0VHlwZSA9PSBK
SVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGls
ZUZ1bmN0aW9uKGV4ZWMsIGNhbGxlZUFyZ3NFeGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCks
IG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CisgICAg
ICAgIGlmIChkZmdDb21waWxlZCkgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2Fs
bC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmFs
dGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0
aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNhbGwtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
KyAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKCk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ2Fs
bC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUoc2Nv
cGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgJm1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0KKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVy
YXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZGlzY2FyZEJ5dGVj
b2RlKCk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+c2V0
SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sp
OwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNhbGxlZUFyZ3NFeGVjKTsKQEAgLTQw
Myw4ICs0MzksMTAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgog
ICAgIHJldHVybiAwOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29u
c3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oaml0
VHlwZSk7CisgICAgCiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CiAgICAgUmVmUHRy
PEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEZ1bmN0
aW9uQm9keU5vZGU+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgMCwgbV9zb3VyY2Us
IG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQ
YXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CkBAIC00MTksMTEgKzQ1NywxMiBAQCBKU09iamVjdCog
RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFT
U0VSVCghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwg
Z2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgp
LCB0cnVlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QuZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0
aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291
cmNlKCkuc3RhcnRPZmZzZXQoKSwgdHJ1ZSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7
CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5
dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCks
ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVy
YXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29t
cGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkp
KSB7Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7CisgICAgICAgIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVC
bG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKICAg
ICAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAg
ICB9CkBAIC00MzQsMTQgKzQ3MywzMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlRm9yCiAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5z
aGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVO
QUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewotICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUt
Pmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAmbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFs
c2U7CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgY29uc3Ry
dWN0b3JzIHdpdGggREZHLgorICAgICAgICBpZiAoZGZnQ29tcGlsZWQpIHsKKyAgICAgICAgICAg
IGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21p
bmdDYWxscygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPiht
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5kb250T3B0aW1pemVBbnl0aW1lU29vbigp
OworICAgICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6Y29tcGls
ZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0
KCksICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIH0KICNp
ZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRv
cjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+ZGlzY2FyZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNvbnN0cnVjdCwgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwogICAgIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5
NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA2LDEwICszMDYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9ldmFsQ29k
ZUJsb2NrKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChl
eGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAg
ICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2V2YWxDb2RlQmxvY2spOwogICAgICAgICAgICAgcmV0
dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogCiAgICAgICAgIEV2YWxD
b2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewpAQCAtMzQ0LDcgKzM0Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3Ry
dWN0dXJlRmxhZ3M7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBib29sKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50
ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAg
dm9pZCB1bmxpbmtDYWxscygpOwogCkBAIC0zNjksMTEgKzM3MSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9i
amVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYg
KCFtX3Byb2dyYW1Db2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29t
cGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fcHJvZ3JhbUNvZGVCbG9jayk7
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVj
dCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworCiAgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKG1fcHJvZ3JhbUNvZGVCbG9jayk7CkBAIC00MDMsNyArNDA3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHVu
bGlua0NhbGxzKCk7CiAKQEAgLTQ1MCwxMSArNDU0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fY29k
ZUJsb2NrRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50
ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGNhbGxlZUFyZ3NFeGVjKTsKKyAgICAgICAgICAg
ICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgICAgICAgICByZXR1
cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFy
Z3NFeGVjID0gMCk7CisKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsOwpAQCAtNDcx
LDExICs0NzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCi0g
ICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywg
c2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKik7CisKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsK
QEAgLTUwMSw2ICs1MDksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
Y29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNvbXBpbGVPcHRpbWl6ZWRGb3Ig
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggYSBjYWxsZnJhbWUgc2V0IHVwIHRvIGNhbGwgdGhp
cyBmdW5jdGlvbiwKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgbWFrZSBzcGVjdWxhdGl2
ZSBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSBhcmd1bWVudHMuCisgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+Y2FsbGVlKCkpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5p
bmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7CisgICAgICAgICAgICBBU1NFUlQoYXNGdW5j
dGlvbihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNhbGwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGV4
ZWMpOworICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAg
ICAgICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChleGVjLCBzY29wZUNo
YWluTm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKQEAgLTU0OSw4ICs1NzEsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IElkZW50
aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywg
RnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9v
bCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wpOwogCi0gICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyk7Ci0gICAgICAgIEpTT2JqZWN0KiBj
b21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsK
KyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2Nv
cGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBl
KTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICAKICAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICB1bnNp
Z25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzIDogMzE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTYwLDkgKzk2MCwxNyBAQAogI2Rl
ZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJMRV9USUVS
RURfQ09NUElMQVRJT04pCisjZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMAorI2Vu
ZGlmCisKIC8qIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBKU1ZBTFVFNjQsIG9ubHkg
dGVzdGVkIG9uIFBMQVRGT1JNKE1BQykgKi8KLSNpZiAhZGVmaW5lZChFTkFCTEVfVkFMVUVfUFJP
RklMRVIpICYmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpICYmIFBMQVRGT1JNKE1BQykK
LSNkZWZpbmUgRU5BQkxFX1ZBTFVFX1BST0ZJTEVSIDAKKyNpZiAhZGVmaW5lZChFTkFCTEVfVkFM
VUVfUFJPRklMRVIpCisjZGVmaW5lIEVOQUJMRV9WQUxVRV9QUk9GSUxFUiBFTkFCTEVfVElFUkVE
X0NPTVBJTEFUSU9OCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9EWU5BTUlDX09QVElN
SVpBVElPTikKKyNkZWZpbmUgRU5BQkxFX0RZTkFNSUNfT1BUSU1JWkFUSU9OIEVOQUJMRV9USUVS
RURfQ09NUElMQVRJT04KICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX1ZFUkJPU0VfVkFM
VUVfUFJPRklMRSkgJiYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oCShyZXZpc2lvbiA5NDUzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDI0ICs0MSw2MyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogZW51bSBTZW50
aW5lbFRhZyB7IFNlbnRpbmVsIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBjbGFzcyBT
ZW50aW5lbExpbmtlZExpc3QgewordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJhc2ljUmF3
U2VudGluZWxOb2RlIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIE5vZGUqIGl0ZXJhdG9yOworICAg
IEJhc2ljUmF3U2VudGluZWxOb2RlKFNlbnRpbmVsVGFnKQorICAgICAgICA6IG1fbmV4dCgwKQor
ICAgICAgICAsIG1fcHJldigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmFzaWNSYXdTZW50
aW5lbE5vZGUoKQorICAgICAgICA6IG1fbmV4dCgwKQorICAgICAgICAsIG1fcHJldigwKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRQcmV2KEJhc2ljUmF3U2VudGluZWxOb2RlKiBw
cmV2KSB7IG1fcHJldiA9IHByZXY7IH0KKyAgICB2b2lkIHNldE5leHQoQmFzaWNSYXdTZW50aW5l
bE5vZGUqIG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorICAgIAorICAgIFQqIHByZXYoKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxUKj4obV9wcmV2KTsgfQorICAgIFQqIG5leHQoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxUKj4obV9uZXh0KTsgfQorICAgIAorICAgIGJvb2wgaXNPbkxpc3QoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhbV9wcmV2ID09ICEhbV9uZXh0KTsKKyAgICAgICAg
cmV0dXJuICEhbV9wcmV2OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZSgpOworICAgIAor
cHJpdmF0ZToKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbV9uZXh0OworICAgIEJhc2ljUmF3
U2VudGluZWxOb2RlKiBtX3ByZXY7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgUmF3Tm9kZSA9IFQ+IGNsYXNzIFNlbnRpbmVsTGlua2VkTGlzdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBUKiBpdGVyYXRvcjsKIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdCgpOwogCi0gICAg
dm9pZCBwdXNoKE5vZGUqKTsKLSAgICBzdGF0aWMgdm9pZCByZW1vdmUoTm9kZSopOworICAgIHZv
aWQgcHVzaChUKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlKFQqKTsKIAogICAgIGl0ZXJhdG9y
IGJlZ2luKCk7CiAgICAgaXRlcmF0b3IgZW5kKCk7CiAKIHByaXZhdGU6Ci0gICAgTm9kZSBtX2hl
YWRTZW50aW5lbDsKLSAgICBOb2RlIG1fdGFpbFNlbnRpbmVsOworICAgIFJhd05vZGUgbV9oZWFk
U2VudGluZWw7CisgICAgUmF3Tm9kZSBtX3RhaWxTZW50aW5lbDsKIH07CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBOb2RlPiBpbmxpbmUgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpTZW50aW5lbExp
bmtlZExpc3QoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8VD46OnJlbW92ZSgpCit7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PFQsIEJhc2ljUmF3U2Vu
dGluZWxOb2RlPFQ+ID46OnJlbW92ZShzdGF0aWNfY2FzdDxUKj4odGhpcykpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIFNlbnRpbmVsTGlua2Vk
TGlzdDxULCBSYXdOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkKICAgICA6IG1faGVhZFNlbnRp
bmVsKFNlbnRpbmVsKQogICAgICwgbV90YWlsU2VudGluZWwoU2VudGluZWwpCiB7CkBAIC02OSwy
MSArMTA4LDI0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgU2VudGluZWwKICAg
ICBtX3RhaWxTZW50aW5lbC5zZXROZXh0KDApOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9k
ZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6aXRlcmF0b3IgU2Vu
dGluZWxMaW5rZWRMaXN0PE5vZGU+OjpiZWdpbigpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdO
b2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjpiZWdpbigpCiB7
Ci0gICAgcmV0dXJuIG1faGVhZFNlbnRpbmVsLm5leHQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VCo+KG1faGVhZFNlbnRpbmVsLm5leHQoKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBO
b2RlPiBpbmxpbmUgdHlwZW5hbWUgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjppdGVyYXRvciBT
ZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OmVuZCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdO
b2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjplbmQoKQogewot
ICAgIHJldHVybiAmbV90YWlsU2VudGluZWw7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPigm
bV90YWlsU2VudGluZWwpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHZv
aWQgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpwdXNoKE5vZGUqIG5vZGUpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxMaW5rZWRM
aXN0PFQsIFJhd05vZGU+OjpwdXNoKFQqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwotICAg
IE5vZGUqIHByZXYgPSAmbV9oZWFkU2VudGluZWw7Ci0gICAgTm9kZSogbmV4dCA9IG1faGVhZFNl
bnRpbmVsLm5leHQoKTsKKyAgICBBU1NFUlQoIW5vZGUtPnByZXYoKSk7CisgICAgQVNTRVJUKCFu
b2RlLT5uZXh0KCkpOworICAgIAorICAgIFJhd05vZGUqIHByZXYgPSAmbV9oZWFkU2VudGluZWw7
CisgICAgUmF3Tm9kZSogbmV4dCA9IG1faGVhZFNlbnRpbmVsLm5leHQoKTsKIAogICAgIG5vZGUt
PnNldFByZXYocHJldik7CiAgICAgbm9kZS0+c2V0TmV4dChuZXh0KTsKQEAgLTkyLDE3ICsxMzQs
MjUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbgogICAgIG5leHQt
PnNldFByZXYobm9kZSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgdm9p
ZCBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnJlbW92ZShOb2RlKiBub2RlKQordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2Vk
TGlzdDxULCBSYXdOb2RlPjo6cmVtb3ZlKFQqIG5vZGUpCiB7Ci0gICAgTm9kZSogcHJldiA9IG5v
ZGUtPnByZXYoKTsKLSAgICBOb2RlKiBuZXh0ID0gbm9kZS0+bmV4dCgpOworICAgIEFTU0VSVChu
b2RlKTsKKyAgICBBU1NFUlQoISFub2RlLT5wcmV2KCkpOworICAgIEFTU0VSVCghIW5vZGUtPm5l
eHQoKSk7CisgICAgCisgICAgUmF3Tm9kZSogcHJldiA9IG5vZGUtPnByZXYoKTsKKyAgICBSYXdO
b2RlKiBuZXh0ID0gbm9kZS0+bmV4dCgpOwogCiAgICAgcHJldi0+c2V0TmV4dChuZXh0KTsKICAg
ICBuZXh0LT5zZXRQcmV2KHByZXYpOworICAgIAorICAgIG5vZGUtPnNldFByZXYoMCk7CisgICAg
bm9kZS0+c2V0TmV4dCgwKTsKIH0KIAogfQogCit1c2luZyBXVEY6OkJhc2ljUmF3U2VudGluZWxO
b2RlOwogdXNpbmcgV1RGOjpTZW50aW5lbExpbmtlZExpc3Q7CiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="102783"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="102799"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106384</attachid>
            <date>2011-09-05 21:16:27 -0700</date>
            <delta_ts>2011-09-05 23:45:00 -0700</delta_ts>
            <desc>the patch - more fix review, sort of</desc>
            <filename>dynopt_patch_14.diff</filename>
            <type>text/plain</type>
            <size>133245</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgyIEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
dGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0aAor
ICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJlIHN0
b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBDb2Rl
QmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0ZUNv
dW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxvZ3Vl
cyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0bwor
ICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAgICAg
ICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmlsZXMs
IGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBwb3J0
IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2YgYWJz
dHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5jYXBz
dWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVyZm9y
bWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNyeXB0
byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1dCBz
dGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxkLiAg
Tm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAgIGlz
IGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBhdmFp
bGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBvZmYg
KHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3Bz
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZp
bGVzLmNtZDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6YnJhbmNoQWRkMzJBYnNvbHV0ZSk6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2XzY0OjpicmFuY2hBZGQzMkFic29sdXRlKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVubGluayk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rQ2FsbHMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNsZWFyRXZhbENhY2hlKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZUV4aXN0aW5nRW50cmllcyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2Rl
QmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6Y29t
cGlsZU9wdGltaXplZCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRp
bWl6ZWQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXpl
ZCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Okdsb2Jh
bENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVC
bG9jazo6UHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OkV2
YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rpb25D
b2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAo
SlNDOjpWYWx1ZVByb2ZpbGU6OmR1bXApOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OmNv
bXB1dGVTdGF0aXN0aWNzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmR5bmFt
aWNhbGx5UHJlZGljdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHRHJp
dmVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZUZ1bmN0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGVGdW5jdGlvbik6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJl
ZGljdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnByZWRpY3RHbG9iYWxWYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6aXNKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNJbnQzMkNv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNEb3VibGVDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZKU0NvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6dmFsdWVPZkludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp2YWx1ZU9mRG91YmxlQ29uc3RhbnQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojppc0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6aXNKU0NvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6aXNJbnQzMkNvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6aXNEb3VibGVDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnZhbHVlT2ZKU0NvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6dmFsdWVPZkludDMyQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjp2YWx1ZU9mRG91YmxlQ29uc3RhbnQpOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6aXNDZWxsUHJlZGljdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6aXNOdW1iZXJQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpwcmVkaWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlUHJlZGljdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6bWFrZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhbHVlT2ZKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpp
c0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzRG91YmxlQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YWx1ZU9mRG91YmxlQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnByZWRpY3QpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdGlvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OlByb3BhZ2F0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpQcm9wYWdhdG9yOjpzZXRQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9w
YWdhdG9yOjptZXJnZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0
ZUZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZUJhY2t3
YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdQ
cm9wYWdhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpwcm9wYWdhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkZmdMaW5rRm9y
KToKKyAgICAgICAgKiBoZWFwL0hhbmRsZUhlYXAuaDoKKyAgICAgICAgKEpTQzo6SGFuZGxlSGVh
cDo6Tm9kZTo6Tm9kZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VGltZW91
dENoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChK
U0M6OkpJVDo6bGlua0Zvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6
Ym90dG9tVGllckpJVCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OnRvcFRpZXJKSVQpOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlOjpuZXh0VGllckpJVCk6CisgICAgICAgICogaml0L0pJVE9wY29k
ZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyk6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OlByb2dyYW1F
eGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1
dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCk6CisgICAgICAg
ICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yKToKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm0uaDoKKyAgICAgICAgKiB3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg6Cisg
ICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZSk6
CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxOb2RlOjpzZXRQcmV2KToKKyAgICAgICAg
KFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnNldE5leHQpOgorICAgICAgICAoV1RGOjpCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTo6cHJldik6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxO
b2RlOjpuZXh0KToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OmlzT25MaXN0
KToKKyAgICAgICAgKFdURjo6OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjo6OlNlbnRpbmVsTGlu
a2VkTGlzdCk6CisgICAgICAgIChXVEY6Ojo6YmVnaW4pOgorICAgICAgICAoV1RGOjo6OmVuZCk6
CisgICAgICAgIChXVEY6Ojo6cHVzaCk6CisKIDIwMTEtMDktMDUgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHI5NDQ0NSBhbmQgcjk0NDQ4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9hc3NlbWJsZXIi
CiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9ieXRlY29kZSIKICAgICAiJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2J5dGVjb21waWxlciIKKyAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2RmZyIK
ICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2hlYXAiCiAgICAgIiR7SkFWQVNDUklQVENPUkVf
RElSfS9kZWJ1Z2dlciIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2ludGVycHJldGVyIgpA
QCAtNTQsNyArNTUsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5jcHAKICAgICBk
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKLQorICAgIAogICAgIGludGVycHJldGVyL0Nh
bGxGcmFtZS5jcHAKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKICAgICBpbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBqYXZhc2NyaXB0Y29yZV9jcHBm
bGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlciBc
CiAJLUkkKHNyY2RpcikvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyIFwKKwktSSQoc3JjZGlyKS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcCBcCiAJLUkkKHNyY2RpcikvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlz
aW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR1BSSW5mby5oIFwKQEAgLTExNiw2ICsxMTgsOCBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vblNwZWN1bGF0aXZlSklULmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1NTAsNiArMTU1MCwxNCBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJPC9GaWx0ZXI+CisgICAgICAgICAgICAgICAgPEZpbHRlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgTmFtZT0iZGZnIgorICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UmVsYXRpdmVQYXRoPSIuLlwuLlxkZmdcREZHRHJpdmVyLmgiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAg
ICAgICAgICA8L0ZpbHRlcj4KIAkJPEZpbHRlcgogCQkJTmFtZT0ieWFyciIKIAkJCT4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlQ29tbW9uLnZzcHJvcHMJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZUNvbW1vbi52c3Byb3BzCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQAogCT4KIAk8VG9v
bAogCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y
aWVzPSImcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqXEphdmFTY3JpcHRDb3JlXERl
cml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87Li4vLi4vQVBJLzsuLi8uLi9wYXJzZXIvOy4uLy4u
L2J5dGVjb21waWxlci87Li4vLi4vaml0LzsuLi8uLi9ydW50aW1lLzsuLi8uLi9ieXRlY29kZS87
Li4vLi4vaW50ZXJwcmV0ZXIvOy4uLy4uL3d0Zi87Li4vLi4vcHJvZmlsZXI7Li4vLi4vYXNzZW1i
bGVyLzsuLi8uLi9kZWJ1Z2dlci87Li4vLi4vaGVhcC87JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNE
aXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVccHJp
dmF0ZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZSZxdW90Ozsm
cXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxKYXZhU2NyaXB0Q29yZSZxdW90
OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXHB0aHJlYWRzJnF1b3Q7IgorCQlBZGRp
dGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
b2JqXEphdmFTY3JpcHRDb3JlXERlcml2ZWRTb3VyY2VzXCZxdW90OzsuLi8uLi87Li4vLi4vQVBJ
LzsuLi8uLi9wYXJzZXIvOy4uLy4uL2J5dGVjb21waWxlci87Li4vLi4vZGZnLzsuLi8uLi9qaXQv
Oy4uLy4uL3J1bnRpbWUvOy4uLy4uL2J5dGVjb2RlLzsuLi8uLi9pbnRlcnByZXRlci87Li4vLi4v
d3RmLzsuLi8uLi9wcm9maWxlcjsuLi8uLi9hc3NlbWJsZXIvOy4uLy4uL2RlYnVnZ2VyLzsuLi8u
Li9oZWFwLzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZxdW90OzsmcXVvdDsk
KFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxk
RGlyKVxpbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIp
XGluY2x1ZGVccHRocmVhZHMmcXVvdDsiCiAJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfX1NU
RF9DIgogCQlGb3JjZWRJbmNsdWRlRmlsZXM9IklDVVZlcnNpb24uaCIKIAkvPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9j
b3B5LWZpbGVzLmNtZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kCShyZXZpc2lvbiA5
NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcg
QEAgbWtkaXIgIiVQcml2YXRlSGVhZGVyc0RpcmVjdG9yeSUiIDI+TlVMCiBmb3IgJSVkIGluICgK
ICAgICBhc3NlbWJsZXIKICAgICBieXRlY29kZQorICAgIGRmZwogICAgIGhlYXAKICAgICBkZWJ1
Z2dlcgogICAgIGludGVycHJldGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTAg
QEAKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDgx
NDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovOyB9OwogCQkwRkM4
MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUx
MjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovOyB9OworCQkwRkQzQzgy
NTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMzE0MTE1RDFBMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5jcHAgKi87IH07CisJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBE
RkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CisJCTBG
RDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0Ig
LyogREZHUHJvcGFnYXRvci5oICovOyB9OworCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyog
REZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07CiAJCTE0MDAw
Njc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9T
QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2
RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEw
N0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8q
IEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTM3NSw3ICszNzksNyBAQAogCQk5NjlB
MDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzI3MEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5o
ICovOyB9OwogCQk5NjlBMDcyQjBFRDFDRTY5MDBGMUY2ODEgLyogUmVnaXN0ZXJJRC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3MjgwRUQxQ0U2
OTAwRjFGNjgxIC8qIFJlZ2lzdGVySUQuaCAqLzsgfTsKIAkJOTY5QTA3MkMwRUQxQ0U2OTAwRjFG
NjgxIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTY5QTA3MjkwRUQxQ0U2OTAwRjFGNjgxIC8qIFNlZ21lbnRlZFZlY3Rv
ci5oICovOyB9OwotCQk5NjlBMDc5NjBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkwMEVE
MUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwICovOyB9OworCQk5NjlBMDc5NjBFRDFEM0FF
MDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkwMEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3Bw
ICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7
IH07IH07CiAJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzkxMEVEMUQzQUUw
MEYxRjY4MSAvKiBDb2RlQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9
OyB9OwogCQk5NjlBMDc5ODBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNoZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTIwRUQxRDNB
RTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLzsgfTsKIAkJOTY5QTA3OTkwRUQxRDNBRTAw
RjFGNjgxIC8qIEluc3RydWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NjlBMDc5MzBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCAq
LzsgfTsKQEAgLTc3OSw2ICs3ODMsMTAgQEAKIAkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V3JpdGVCYXJyaWVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4
MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVlRhYmxlU3BlY3RydW0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3BlY3Ry
dW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlRhYmxlU3BlY3RydW0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8q
IERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdE
cml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJp
dmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDNDODIzMTQxMTVEMUEwMEZE
ODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1Byb3BhZ2F0b3IuY3BwOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
YWdhdG9yLmg7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
UG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0
b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0
QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIx
NzksNiArMjE4NywxMCBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQzQzgyNDE0MTE1
RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovLAorCQkJCTBGRDNDODIzMTQxMTVEMUEw
MEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCAqLywKKwkJCQkwRkQzQzgyMjE0MTE1RDBFMDBG
RDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCisJCQkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8q
IERGR0RyaXZlci5jcHAgKi8sCiAJCQkJODZFQ0E0RjAxMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0Fs
aWFzVHJhY2tlci5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5
dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yNjE3LDYgKzI2MjksOCBAQAogCQkJCUMyMkM1MkZGMTNG
QUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJDNTMx
NDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJDNTMx
NTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI3
MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDMzLDYgKzMwNDcsOCBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAo
CisJCQkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAy
RkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2LmgJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIGFkZHJlc3MpOwogICAg
IH0KIAorICAgIEp1bXAgYnJhbmNoQWRkMzJBYnNvbHV0ZShSZXN1bHRDb25kaXRpb24gY29uZCwg
VHJ1c3RlZEltbTMyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hZGRsX2ltKHNyYy5tX3ZhbHVlLCBkZXN0Lm1fcHRyKTsKKyAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKwog
ICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxfcm0ocmlnaHQsIGxlZnQubV9wdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gOTQ1
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsMTMgQEAgcHVibGljOgogICAgICAg
ICBtX2Fzc2VtYmxlci5zZXRDQ19yKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnpibF9ycihkZXN0LCBkZXN0KTsKICAgICB9CisgICAgCisgICAgSnVt
cCBicmFuY2hBZGQzMkFic29sdXRlKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIg
c3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihkZXN0Lm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgYWRkMzIoc3JjLCBB
ZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQogCiAgICAgSnVtcCBicmFuY2hQdHIo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmln
aHQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDEsOSArMTQwMSwxMCBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLUNvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxl
KiBzeW1UYWIsIGJvb2wgaXNDb25zdHJ1Y3RvcikKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFs
T2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1UYWIsIGJvb2wg
aXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQogICAgIDog
bV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJs
ZSwgZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFwKCZtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLmhlYXApCisgICAgLCBtX2V4ZWN1dGVDb3VudGVyKC0xMDAwKSAvLyB0cmlnZ2VyIG9wdGlt
aXphdGlvbiB3aGVuIHNpZ24gYml0IGNsZWFycwogICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMo
MCkKICAgICAsIG1fbnVtVmFycygwKQogICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCkBAIC0xNDIy
LDYgKzE0MjMsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAg
ICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJj
ZU9mZnNldCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFiKQorICAgICwgbV9hbHRlcm5hdGl2
ZShhbHRlcm5hdGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwogCkBAIC0xNDQxLDE1ICsx
NDQzLDE4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgIGFyZyA9ICV1OiAiLCBpICsgMSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5ieXRlY29kZU9mZnNl
dCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJzYW1wbGVzID0g
JXUsIGludDMyID0gJXUsIGRvdWJsZSA9ICV1LCBjZWxsID0gJXUsIGFycmF5ID0gJXVcbiIsCi0g
ICAgICAgICAgICAgICAgcHJvZmlsZS0+bnVtYmVyT2ZTYW1wbGVzKCksCi0gICAgICAgICAgICAg
ICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkludDMyKCksCi0gICAgICAgICAgICAgICAgcHJvZmls
ZS0+cHJvYmFiaWxpdHlPZkRvdWJsZSgpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2Jh
YmlsaXR5T2ZDZWxsKCksCi0gICAgICAgICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkFy
cmF5KCkpOworICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZGVycik7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiXG4iKTsKICAgICB9CiAjZW5kaWYKKyAgICAKKyAgICAvLyBXZSBzaG91bGQgbm90
IGJlIGdhcmJhZ2UgY29sbGVjdGVkIGlmIHRoZXJlIGFyZSBpbmNvbWluZyBjYWxscy4gQnV0Cisg
ICAgLy8gaWYgdGhpcyBpcyBjYWxsZWQgZHVyaW5nIGhlYXAgZGVzdHJ1Y3Rpb24sIHRoZW4gdGhl
cmUgbWF5IHN0aWxsIGJlCisgICAgLy8gaW5jb21pbmcgY2FsbHMsIHdoaWNoIGlzIGhhcm1sZXNz
LgorICAgIAorICAgIC8vIE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1v
dmVkIGZyb20gb3RoZXIgQ29kZUJsb2NrcycKKyAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2Vk
IGxpc3RzIHRocm91Z2ggdGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbworICAgIC8v
IGRlc3RydWN0b3JzLgogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBmb3IgKHNpemVfdCBzaXplID0g
bV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKQEAgLTE1
MTksNiArMTUyNCw4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQK
IHsKICAgICBib29sIGhhbmRsZVdlYWtSZWZlcmVuY2VzID0gZmFsc2U7CiAgICAgCisgICAgaWYg
KCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmbV9vd25lckV4ZWN1dGFibGUpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7CkBA
IC0xNzg5LDggKzE3OTYsMzAgQEAgdm9pZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2Fs
bEZyYQogfQogICAgIAogI2lmIEVOQUJMRShKSVQpCit2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikK
K3sKKyAgICBBU1NFUlQoaXNMaW5rZWQoKSk7CisgICAgCisgICAgaWYgKGlzREZHKSB7CisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlv
bkNhbGwoY2FsbFJldHVybkxvY2F0aW9uKSwgaXNDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBv
cGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENv
ZGVMb2NhdGlvbk5lYXJDYWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbD8gZ2xvYmFsRGF0
YS5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5j
dGlWaXJ0dWFsQ29uc3RydWN0TGluaygpKTsKKyAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZh
bHNlOworICAgIGNhbGxlZS5jbGVhcigpOworCisgICAgLy8gSXQgd2lsbCBiZSBvbiBhIGxpc3Qg
aWYgdGhlIGNhbGxlZSBoYXMgYSBjb2RlIGJsb2NrLgorICAgIGlmIChpc09uTGlzdCgpKQorICAg
ICAgICByZW1vdmUoKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKIHsKKyAg
ICBpZiAoISFtX2FsdGVybmF0aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT51bmxpbmtDYWxs
cygpOwogICAgIGlmICghKG1fY2FsbExpbmtJbmZvcy5zaXplKCkgfHwgbV9tZXRob2RDYWxsTGlu
a0luZm9zLnNpemUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fZ2xvYmFsRGF0YS0+
Y2FuVXNlSklUKCkpCkBAIC0xNzk5LDI0ICsxODI4LDEwMSBAQCB2b2lkIENvZGVCbG9jazo6dW5s
aW5rQ2FsbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9zLnNp
emUoKTsgaSsrKSB7CiAgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6REZHSklUKSB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhDb2RlTG9jYXRpb25DYWxsKG1fY2FsbExpbmtJbmZvc1tp
XS5jYWxsUmV0dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5mb3NbaV0uaXNDYWxsID8gb3BlcmF0
aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKLSNlbHNlCi0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKG1fY2FsbExpbmtJ
bmZvc1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5mb3NbaV0uaXNDYWxsID8g
bV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkgOiBtX2dsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpKTsKLSAgICAgICAgbV9jYWxs
TGlua0luZm9zW2ldLnVubGluaygpOworICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5r
KCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOwogICAgIH0KIH0KKwordm9pZCBDb2RlQmxv
Y2s6OnVubGlua0luY29taW5nQ2FsbHMoKQoreworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcih0aGlzKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNv
bWluZ0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5r
KCptX2dsb2JhbERhdGEsIHJlcGF0Y2hCdWZmZXIpOworfQogI2VuZGlmCiAKIHZvaWQgQ29kZUJs
b2NrOjpjbGVhckV2YWxDYWNoZSgpCiB7CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAg
ICAgbV9hbHRlcm5hdGl2ZS0+Y2xlYXJFdmFsQ2FjaGUoKTsKICAgICBpZiAoIW1fcmFyZURhdGEp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUuY2xlYXIo
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIHJlcGxhY2VFeGlzdGlu
Z0VudHJpZXMoVmVjdG9yPFQ+JiB0YXJnZXQsIFZlY3RvcjxUPiYgc291cmNlKQoreworICAgIEFT
U0VSVCh0YXJnZXQuc2l6ZSgpIDw9IHNvdXJjZS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFyZ2V0LnNpemUoKTsgKytpKQorICAgICAgICB0YXJnZXRbaV0gPSBzb3VyY2Vb
aV07Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpCit7Cisg
ICAgaWYgKCFtX2FsdGVybmF0aXZlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVwbGFj
ZUV4aXN0aW5nRW50cmllcyhtX2NvbnN0YW50UmVnaXN0ZXJzLCBtX2FsdGVybmF0aXZlLT5tX2Nv
bnN0YW50UmVnaXN0ZXJzKTsKKyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVuY3Rpb25E
ZWNscywgbV9hbHRlcm5hdGl2ZS0+bV9mdW5jdGlvbkRlY2xzKTsKKyAgICByZXBsYWNlRXhpc3Rp
bmdFbnRyaWVzKG1fZnVuY3Rpb25FeHBycywgbV9hbHRlcm5hdGl2ZS0+bV9mdW5jdGlvbkV4cHJz
KTsKK30KKworLy8gRklYTUU6IEltcGxlbWVudCBPU1IuIElmIGNvbXBpbGVPcHRpbWl6ZWQoKSBp
cyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUKKy8vIGVwaWxvZ3VlLCBkbyBP
U1IgZnJvbSB0aGUgb2xkIGNvZGUgYmxvY2sgdG8gdGhlIG5ldyBvbmUuCisKKy8vIEZJWE1FOiBB
ZnRlciBkb2luZyBzdWNjZXNzZnVsIG9wdGltaXplZCBjb21waWxhdGlvbiwgcmVzZXQgdGhlIHBy
b2ZpbGluZyBjb3VudGVyIHRvIC0xLCBzbworLy8gdGhhdCB0aGUgbmV4dCBleGVjdXRpb24gb2Yg
dGhlIG9sZCBjb2RlIGJsb2NrIHdpbGwganVtcCBzdHJhaWdodCBpbnRvIGNvbXBpbGVPcHRpbWl6
ZWQoKQorLy8gYW5kIHBlcmZvcm0gT1NSLgorCisvLyBGSVhNRTogRW5zdXJlIHRoYXQgYSBjYWxs
IHRvIGNvbXBpbGVPcHRpbWl6ZWQoKSBqdXN0IGRvZXMgT1NSIChhbmQgcmVzZXRzIHRoZSBjb3Vu
dGVyIHRvIC0xKQorLy8gaWYgdGhlIGNvZGUgaGFkIGFscmVhZHkgYmVlbiBjb21waWxlZC4KKwor
Q29kZUJsb2NrKiBQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2Vu
ZXJhdGVkQnl0ZWNvZGUoKTsKK30KKworQ29kZUJsb2NrKiBFdmFsQ29kZUJsb2NrOjpyZXBsYWNl
bWVudCgpCit7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKK30KKworQ29kZUJsb2NrKiBGdW5j
dGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29k
ZUZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwor
fQorCitKU09iamVjdCogUHJvZ3JhbUNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVw
bGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5
cGUoKSkpIHsKKyAgICAgICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhp
dCB0aGlzIGFnYWluIGFueXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0
YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxl
T3B0aW1pemVkKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisK
K0pTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIGlmIChyZXBsYWNlbWVu
dCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkg
eworICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMg
YWdhaW4gYW55dGltZSBzb29uLgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nh
c3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQo
ZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3Qq
IEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIGlmIChyZXBsYWNlbWVudCgpLT5n
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkgeworICAg
ICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4g
YW55dGltZSBzb29uLgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkRm9y
KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0
IDogQ29kZUZvckNhbGwpOworICAgIHJldHVybiBlcnJvcjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50
ZWRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTk4LDEyICs5OSwxOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzdHJ1Y3QgQ2Fs
bExpbmtJbmZvIHsKKyAgICBzdHJ1Y3QgQ2FsbExpbmtJbmZvOiBwdWJsaWMgQmFzaWNSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIENhbGxMaW5rSW5mbygpCiAgICAgICAg
ICAgICA6IGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQogICAgICAgICAgICAgLCBpc0NhbGwo
ZmFsc2UpCisgICAgICAgICAgICAsIGlzREZHKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIH5DYWxsTGlua0luZm8oKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgICAgICAgICByZW1vdmUoKTsKKyAgICAgICAgfQog
CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBh
IG5lYXIgY2FsbCBpbiB0aGUgb2xkIEpJVCwgb3IgYSBub3JtYWwgY2FsbCBpbiBERkcKICAgICAg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKQEAgLTExMSwxMyArMTE5
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bj4gY2FsbGVlOwogICAgICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICAg
ICAgYm9vbCBpc0NhbGwgOiAxOworICAgICAgICBib29sIGlzREZHIDogMTsKIAogICAgICAgICBi
b29sIGlzTGlua2VkKCkgeyByZXR1cm4gY2FsbGVlOyB9Ci0gICAgICAgIHZvaWQgdW5saW5rKCkK
LSAgICAgICAgewotICAgICAgICAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKLSAg
ICAgICAgICAgIGNhbGxlZS5jbGVhcigpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgdW5saW5r
KEpTR2xvYmFsRGF0YSYsIFJlcGF0Y2hCdWZmZXImKTsKIAogICAgICAgICBib29sIHNlZW5PbmNl
KCkKICAgICAgICAgewpAQCAtMjEwLDEzICsyMTUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
LCBib29sIGlzQ29uc3RydWN0b3IpOworICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSosIGJv
b2wgaXNDb25zdHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKTsKIAog
ICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAg
ICAgICBIZWFwKiBtX2hlYXA7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNvZGVC
bG9jaygpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsgcmV0
dXJuIG1fYWx0ZXJuYXRpdmUuZ2V0KCk7IH0KKyAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+
IHJlbGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9
CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogICAgICAgICB2
b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKQEAgLTI3OSw2ICsyODcsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHVubGlua0NhbGxz
KCk7CisgICAgICAgIAorICAgICAgICBib29sIGhhc0luY29taW5nQ2FsbHMoKSB7IHJldHVybiBt
X2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCk7IH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsTGlua0luZm8qIGluY29taW5n
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCkBAIC0zMDAsOCArMzE3LDE4IEBA
IG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBKSVRD
b2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yID8gb3duZXJFeGVjdXRh
YmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKSA6IG93bmVyRXhlY3V0YWJsZSgp
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9CisgICAgICAgIHZvaWQgc2V0SklUQ29kZShj
b25zdCBKSVRDb2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNo
ZWNrKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ppdENvZGUgPSBjb2RlOworICAgICAgICAg
ICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgICAg
IH0KKyAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQor
ICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUu
aml0VHlwZSgpOyB9CiAgICAgICAgIEV4ZWN1dGFibGVQb29sKiBleGVjdXRhYmxlUG9vbCgpIHsg
cmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9CisgICAgICAgIHZpcnR1
YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKKyNl
bHNlCisgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIEpJVENv
ZGU6OkJhc2VsaW5lSklUOyB9CiAjZW5kaWYKIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsg
fQpAQCAtMzk4LDYgKzQyNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwg
Z2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVBy
b2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICB9CisgICAgICAgIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaW50IGFyZ3VtZW50SW5kZXgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGFyZ3VtZW50SW5kZXggLSAxOworICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gbV92YWx1ZVByb2ZpbGVz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFZhbHVlUHJv
ZmlsZSogcmVzdWx0ID0gdmFsdWVQcm9maWxlKGFyZ3VtZW50SW5kZXggLSAxKTsKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQtPmJ5dGVjb2RlT2Zmc2V0ICE9IC0xKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogI2VuZGlmCiAK
ICAgICAgICAgdW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluZm9Db3VudCgpIGNvbnN0CkBAIC01MzUs
NiArNTcyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBFdmFsQ29kZUNhY2hlJiBldmFs
Q29kZUNhY2hlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVE
YXRhLT5tX2V2YWxDb2RlQ2FjaGU7IH0KIAogICAgICAgICB2b2lkIHNocmlua1RvRml0KCk7Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CisgICAgICAg
IAorICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fZXhlY3V0ZUNvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOwog
CiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUu
CiAKQEAgLTU5NCw2ICs2NDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEds
b2JhbFJlc29sdmVJbmZvPiBtX2dsb2JhbFJlc29sdmVJbmZvczsKICAgICAgICAgVmVjdG9yPENh
bGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbExp
bmtJbmZvPiBtX21ldGhvZENhbGxMaW5rSW5mb3M7CisgICAgICAgIEpJVENvZGUgbV9qaXRDb2Rl
OworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7
CisgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4gPiBtX2luY29taW5nQ2FsbHM7CiAjZW5kaWYKICNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUs
IDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTYxMCw2ICs2NjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAorICAgICAgICBPd25QdHI8
Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5n
CisKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgICAgIHB1YmxpYzoKQEAgLTY0Niw5ICs3MDIsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAvLyByZXNwb25zaWJsZSBmb3IgbWFya2luZyBpdC4KIAogICAgIGNsYXNzIEds
b2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAg
R2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5
cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpCi0gICAg
ICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmpl
Y3QsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUs
IGZhbHNlKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5h
dGl2ZSkKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUs
IGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgJm1fdW5zaGFyZWRT
eW1ib2xUYWJsZSwgZmFsc2UsIGFsdGVybmF0aXZlKQogICAgICAgICB7CiAgICAgICAgIH0KIApA
QCAtNjU4LDE2ICs3MTQsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcm9ncmFt
Q29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGljOgotICAgICAg
ICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlcikKLSAgICAgICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJv
dmlkZXIsIDApCisgICAgICAgIFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBQYXNzT3du
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9j
ayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVy
LCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorI2lmIEVO
QUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1
YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAgICAgfTsKIAogICAgIGNsYXNz
IEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCkKLSAgICAgICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJv
dmlkZXIsIDApCisgICAgICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCwgUGFzc093blB0cjxD
b2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3du
ZXJFeGVjdXRhYmxlLCBFdmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwg
YWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoYmFzZVNjb3BlRGVw
dGgpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNjgxLDYgKzc0MywxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOwogICAgICAg
ICAgICAgbV92YXJpYWJsZXMuc3dhcCh2YXJpYWJsZXMpOwogICAgICAgICB9CisgICAgICAgIAor
I2lmIEVOQUJMRShKSVQpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAg
IHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAKICAgICBwcml2YXRl
OgogICAgICAgICBpbnQgbV9iYXNlU2NvcGVEZXB0aDsKQEAgLTY5MywxNCArNzYxLDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyBhcyB3ZSBuZWVkIHRvIGluaXRpYWxpc2UgdGhlIENv
ZGVCbG9jayBiZWZvcmUgd2UgY291bGQgaW5pdGlhbGlzZSBhbnkgUmVmUHRyIHRvIGhvbGQgdGhl
IHNoYXJlZAogICAgICAgICAvLyBzeW1ib2wgdGFibGUsIHNvIHdlIGp1c3QgcGFzcyBhcyBhIHJh
dyBwb2ludGVyIHdpdGggYSByZWYgY291bnQgb2YgMS4gIFdlIHRoZW4gbWFudWFsbHkgZGVyZWYK
ICAgICAgICAgLy8gaW4gdGhlIGRlc3RydWN0b3IuCi0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2Nr
KEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgYm9vbCBpc0NvbnN0cnVjdG9y
KQotICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBTaGFyZWRTeW1ib2xUYWJs
ZTo6Y3JlYXRlKCkubGVha1JlZigpLCBpc0NvbnN0cnVjdG9yKQorICAgICAgICBGdW5jdGlvbkNv
ZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25z
dHJ1Y3RvciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAg
OiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3Vy
Y2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCkubGVh
a1JlZigpLCBpc0NvbnN0cnVjdG9yLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9
CiAgICAgICAgIH5GdW5jdGlvbkNvZGVCbG9jaygpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNo
YXJlZFN5bWJvbFRhYmxlKCktPmRlcmVmKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5B
QkxFKEpJVCkKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmlydHVh
bCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CisjZW5kaWYKICAgICB9OwogCiAgICAgaW5saW5l
IFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGNvdW50cyAqIGNlcnRhaW50eSAvIG51bWJlck9mU2Ft
cGxlczsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mSW50MzJz
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CkBAIC0xNDIsNiAr
MTQyLDg2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGNv
bXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZkFycmF5cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7CiAg
ICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgewor
ICAgICAgICBmcHJpbnRmKG91dCwKKyAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQz
MiA9ICV1LCBkb3VibGUgPSAldSwgY2VsbCA9ICV1LCBhcnJheSA9ICV1IiwKKyAgICAgICAgICAg
ICAgICBudW1iZXJPZlNhbXBsZXMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkludDMycygp
LAorICAgICAgICAgICAgICAgIG51bWJlck9mRG91YmxlcygpLAorICAgICAgICAgICAgICAgIG51
bWJlck9mQ2VsbHMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkFycmF5cygpKTsKKyAgICAg
ICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSB8fCAh
IXdlYWtCdWNrZXRzW2ldKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGZwcmludGYob3V0LCAiOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgZmly
c3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ZnByaW50ZihvdXQsICIsICIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoISFidWNrZXRzW2ldKQorICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiJXMi
LCBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXRzW2ldKQorICAgICAgICAgICAgICAgIGZw
cmludGYob3V0LCAiRGVhZENlbGwiKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIAor
ICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKKyAgICAgICAgdW5zaWduZWQgc2FtcGxlczsKKyAgICAg
ICAgdW5zaWduZWQgaW50MzJzOworICAgICAgICB1bnNpZ25lZCBkb3VibGVzOworICAgICAgICB1
bnNpZ25lZCBjZWxsczsKKyAgICAgICAgdW5zaWduZWQgYXJyYXlzOworICAgIH07CisKKyAgICAv
LyBPcHRpbWl6ZWQgbWV0aG9kIGZvciBnZXR0aW5nIGFsbCBjb3VudHMgYXQgb25jZS4KKyAgICB2
b2lkIGNvbXB1dGVTdGF0aXN0aWNzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RhdGlzdGlj
cyYgc3RhdGlzdGljcykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNhbXBsZXMgPSAw
OworICAgICAgICB1bnNpZ25lZCBpbnQzMnMgID0gMDsKKyAgICAgICAgdW5zaWduZWQgZG91Ymxl
cyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGNlbGxzICAgPSAwOworICAgICAgICB1bnNpZ25lZCBh
cnJheXMgID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAgICAgaWYgKCFidWNrZXRzW2ldKSB7Cisg
ICAgICAgICAgICAgICAgV2Vha0J1Y2tldCB3ZWFrQnVja2V0ID0gd2Vha0J1Y2tldHNbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKCEhd2Vha0J1Y2tldCkgeworICAgICAgICAgICAgICAgICAgICBz
YW1wbGVzKys7CisgICAgICAgICAgICAgICAgICAgIGNlbGxzKys7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh3ZWFrQnVja2V0LmdldENsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8pCisg
ICAgICAgICAgICAgICAgICAgICAgICBhcnJheXMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHNhbXBsZXMrKzsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgaW50MzJzKys7Cisg
ICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAgICAgICAgIGRv
dWJsZXMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAg
ICAgICAgICAgY2VsbHMrKzsKKyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZnbG9iYWxE
YXRhLCB2YWx1ZS5hc0NlbGwoKSkpCisgICAgICAgICAgICAgICAgICAgIGFycmF5cysrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aXN0aWNzLnNhbXBs
ZXMgPSBzYW1wbGVzOworICAgICAgICBzdGF0aXN0aWNzLmludDMycyAgPSBpbnQzMnM7CisgICAg
ICAgIHN0YXRpc3RpY3MuZG91YmxlcyA9IGRvdWJsZXM7CisgICAgICAgIHN0YXRpc3RpY3MuY2Vs
bHMgICA9IGNlbGxzOworICAgICAgICBzdGF0aXN0aWNzLmFycmF5cyAgPSBhcnJheXM7CisgICAg
fQogICAgIAogICAgIGludCBieXRlY29kZU9mZnNldDsgLy8gLTEgZm9yIHByb2xvZ3VlCiAgICAg
RW5jb2RlZEpTVmFsdWUgYnVja2V0c1tudW1iZXJPZkJ1Y2tldHNdOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwcmVzZXJ2ZUxhc3RWYXIoCiAgICAgICAgIG1f
bGFzdFZhciA9ICZtX2NhbGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2Rl
QmxvY2sqIGNvZGVCbG9jaykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQ
cm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGls
YXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Mo
c2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0
UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmco
KSkKICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9i
amVjdC0+c3VwcG9ydHNSaWNoU291cmNlSW5mbygpKQpAQCAtMjI4LDYgKzIyOCw5IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICAKICAgICBtX2NvZGVCbG9j
ay0+bV9udW1QYXJhbWV0ZXJzID0gMTsgLy8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogICAg
IGNvZGVCbG9jay0+bV9udW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAg
ICAKKyAgICBpZiAoY29tcGlsYXRpb25LaW5kID09IE9wdGltaXppbmdDb21waWxhdGlvbikKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3Bl
Q2hhaW4tPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKQEAgLTI1OCw3ICsyNjEsNyBAQCBCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlv
bkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktp
bmQpCiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVj
dC0+ZGVidWdnZXIoKSkKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWlu
LT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRS
aWNoU291cmNlSW5mbyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJj
ZUluZm8oKSkKQEAgLTQxOSw3ICs0MjIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoRnVuCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3lt
Ym9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVn
SG9va3Moc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91
bGRFbWl0UHJvZmlsZUhvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9m
aWxpbmcoKSkKICAgICAsIG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmds
b2JhbE9iamVjdC0+c3VwcG9ydHNSaWNoU291cmNlSW5mbygpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXREdW1w
c0dlbmVyYXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBkdW1wc0dlbmVyYXRlZENvZGUoKTsKIAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQ
cm9ncmFtTm9kZSosIFNjb3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJs
b2NrKik7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBTY29w
ZUNoYWluTm9kZSosIFN5bWJvbFRhYmxlKiwgQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKEV2YWxOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxD
b2RlQmxvY2sqKTsKKyAgICAgICAgZW51bSBDb21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0
aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKKyAgICAgICAgCisgICAgICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFBy
b2dyYW1Db2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENv
ZGVCbG9jayosIENvbXBpbGF0aW9uS2luZCk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2
YWxOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqLCBD
b21waWxhdGlvbktpbmQpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFsRGF0YTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlm
aWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXM7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBUaGlzIGNsYXNzIGlzIHVz
ZWQgdG8gY29tcGlsZSB0aGUgZGF0YWZsb3cgZ3JhcGggZnJvbSBhIENvZGVCbG9jay4KIGNsYXNz
IEJ5dGVDb2RlUGFyc2VyIHsKIHB1YmxpYzoKLSAgICBCeXRlQ29kZVBhcnNlcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBHcmFwaCYgZ3JhcGgpCisgICAg
Qnl0ZUNvZGVQYXJzZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDog
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQorICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1f
Z3JhcGgoZ3JhcGgpCiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAgICAgLCBtX3Bh
cnNlRmFpbGVkKGZhbHNlKQpAQCAtNjUsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9w
YXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgIHsK
KyNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisgICAgICAgIEFTU0VSVChtX3Byb2Zp
bGVkQmxvY2spOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gUGFyc2UgYSBmdWxsIENvZGVCbG9j
ayBvZiBieXRlY29kZS4KQEAgLTEwMiw5ICsxMDYsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBN
dXN0IGJlIGEgbG9jYWwuCiAgICAgICAgIHJldHVybiBnZXRMb2NhbCgodW5zaWduZWQpb3BlcmFu
ZCk7CiAgICAgfQotICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFBy
ZWRpY3RlZFR5cGUgc3RhdGljUHJlZGljdGlvbiA9IFByZWRpY3ROb25lKQorICAgIHZvaWQgc2V0
KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFByZWRpY3RlZFR5cGUgd2Vha1ByZWRpY3Rp
b24gPSBQcmVkaWN0Tm9uZSkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgucHJlZGljdChvcGVyYW5k
LCBzdGF0aWNQcmVkaWN0aW9uLCBTdGF0aWNQcmVkaWN0aW9uKTsKKyAgICAgICAgbV9ncmFwaC5w
cmVkaWN0KG9wZXJhbmQsIHdlYWtQcmVkaWN0aW9uLCBXZWFrUHJlZGljdGlvbik7CiAKICAgICAg
ICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKSB7CkBAIC00MjEsMTkgKzQyNSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ0lkeCkpOwogICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8oUHJlZGljdE5vbmUp
KTsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0
aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAgICAgaWYgKGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3Vs
dCkKKyAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+
dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkgewogICAgICAgICAgICAgc2V0KHB1dElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CisgICAgICAgICAgICBzdHJvbmdseVByZWRp
Y3QoY2FsbCwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpKTsKKyAgICAg
ICAgfQogICAgICAgICBpZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgKHVu
c2lnbmVkKWFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykKICAgICAgICAgICAgIG1fcGFyYW1l
dGVyU2xvdHMgPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsK
ICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogCi0gICAgdm9pZCBzdGF0aWNhbGx5UHJlZGlj
dEFycmF5KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCB3ZWFrbHlQcmVkaWN0QXJyYXko
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgucHJlZGljdChtX2dy
YXBoW25vZGVJbmRleF0sIFByZWRpY3RBcnJheSwgU3RhdGljUHJlZGljdGlvbik7CisgICAgICAg
IG1fZ3JhcGgucHJlZGljdChtX2dyYXBoW25vZGVJbmRleF0sIFByZWRpY3RBcnJheSwgV2Vha1By
ZWRpY3Rpb24pOwogICAgIH0KIAotICAgIHZvaWQgc3RhdGljYWxseVByZWRpY3RJbnQzMihOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgd2Vha2x5UHJlZGljdEludDMyKE5vZGVJbmRleCBu
b2RlSW5kZXgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9yZXVzYWJsZU5vZGVTdGFjay5pc0Vt
cHR5KCkpOwogICAgICAgICBtX3JldXNhYmxlTm9kZVN0YWNrLmFwcGVuZCgmbV9ncmFwaFtub2Rl
SW5kZXhdKTsKQEAgLTQ1NywxNCArNDYzLDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
bV9yZXVzYWJsZU5vZGVTdGFjay5hcHBlbmQoJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQyKCldKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5wcmVkaWN0KCpub2RlUHRyLCBQcmVkaWN0SW50MzIsIFN0YXRpY1ByZWRp
Y3Rpb24pOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucHJlZGljdCgqbm9kZVB0ciwgUHJlZGlj
dEludDMyLCBXZWFrUHJlZGljdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gd2hpbGUgKCFtX3JldXNhYmxlTm9kZVN0YWNrLmlzRW1wdHkoKSk7
CiAgICAgfQorICAgIAorICAgIHZvaWQgc3Ryb25nbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5k
ZXgsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgeworI2lmIEVOQUJMRShEWU5BTUlDX09Q
VElNSVpBVElPTikKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gbV9wcm9maWxlZEJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgQVNTRVJUKHByb2ZpbGUpOworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50
ZigiRHluYW1pYyBwcmVkaWN0aW9uIFsldSwgJXVdOiAiLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4i
KTsKKyNlbmRpZgorICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJlZGljdChtYWtlUHJlZGlj
dGlvbigqbV9nbG9iYWxEYXRhLCAqcHJvZmlsZSksIFN0cm9uZ1ByZWRpY3Rpb24pOworI2Vsc2UK
KyAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZUluZGV4KTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICB2b2lkIHN0cm9uZ2x5UHJl
ZGljdChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgc3Ryb25nbHlQcmVkaWN0
KG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgpOworICAgIH0KIAogICAgIEpTR2xvYmFsRGF0YSog
bV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKICAgICAvLyBUaGUgY3Vy
cmVudCBibG9jayBiZWluZyBnZW5lcmF0ZWQuCkBAIC01NjMsNyArNTkyLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChK
dW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiAhbV9wYXJz
ZUZhaWxlZDsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICAvLyBTd2l0Y2ggb24gdGhl
IGN1cnJlbnQgYnl0ZWNvZGUgb3Bjb2RlLgogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zQmVnaW4gKyBtX2N1cnJlbnRJbmRleDsKICAgICAgICAg
c3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9w
Y29kZSkpIHsKQEAgLTU4Nyw4ICs2MTYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDEp
OwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAgICAg
d2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIo
b3AyKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBh
ZGRUb0dyYXBoKEJpdEFuZCwgb3AxLCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfYml0YW5kKTsKICAgICAgICAgfQpAQCAtNTk2LDggKzYyNSw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9i
aXRvcjogewogICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHN0
YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0
SW50MzIob3AyKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDEpOworICAgICAg
ICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICBzZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChCaXRPciwgb3AxLCBvcDIpLCBQcmVk
aWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0b3IpOwogICAgICAgICB9
CkBAIC02MDUsOCArNjM0LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICBjYXNlIG9wX2JpdHhvcjogewogICAgICAgICAgICAgTm9kZUluZGV4IG9w
MSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAg
ICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgIHdlYWtseVBy
ZWRpY3RJbnQzMihvcDEpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFw
aChCaXRYb3IsIG9wMSwgb3AyKSwgUHJlZGljdEludDMyKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2JpdHhvcik7CiAgICAgICAgIH0KQEAgLTYxNCw4ICs2NDMsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7
CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGljYWxs
eVByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihv
cDIpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICB3
ZWFrbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAg
ICAgICAgICAgICAvLyBPcHRpbWl6ZSBvdXQgc2hpZnRzIGJ5IHplcm8uCiAgICAgICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG9wMikgJiYgISh2YWx1ZU9mSW50MzJDb25zdGFudChvcDIpICYg
MHgxZikpCkBAIC02MjksOCArNjU4LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2xzaGlmdDogewogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsK
LSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgIHdl
YWtseVByZWRpY3RJbnQzMihvcDEpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9w
Mik7CiAgICAgICAgICAgICBOb2RlSW5kZXggcmVzdWx0OwogICAgICAgICAgICAgLy8gT3B0aW1p
emUgb3V0IHNoaWZ0cyBieSB6ZXJvLgogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChv
cDIpICYmICEodmFsdWVPZkludDMyQ29uc3RhbnQob3AyKSAmIDB4MWYpKQpAQCAtNjQ0LDggKzY3
Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
Y2FzZSBvcF91cnNoaWZ0OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQz
MihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAgICAgc3RhdGlj
YWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9w
MSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCByZXN1bHQ7CiAgICAgICAgICAgICAvLyBUaGUgcmVzdWx0IG9mIGEgemVyby1leHRl
bmRpbmcgcmlnaHQgc2hpZnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZS4KICAgICAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgdG9wIGJpdCBpcyBzZXQsIHRoZSByZXN1
bHQgaXMgbm90IGluIHRoZSBpbnQzMiByYW5nZSwKQEAgLTY3NSw3ICs3MDQsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2lu
YzogewogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0Rz
dCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAg
IHdlYWtseVByZWRpY3RJbnQzMihvcCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dy
YXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3By
ZV9pbmMpOwogICAgICAgICB9CkBAIC02ODQsNyArNzEzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0Rz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5k
ZXggb3AgPSBnZXRUb051bWJlcihzcmNEc3QpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRp
Y3RJbnQzMihvcCk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwogICAgICAg
ICAgICAgc2V0KHJlc3VsdCwgb3ApOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFw
aChBcml0aEFkZCwgb3AsIG9uZSgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0
X2luYyk7CkBAIC02OTMsNyArNzIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3ByZV9kZWM6IHsKICAgICAgICAgICAgIHVuc2ln
bmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBOb2RlSW5kZXggb3AgPSBnZXRUb051bWJlcihzcmNEc3QpOwotICAgICAgICAgICAgc3RhdGlj
YWxseVByZWRpY3RJbnQzMihvcCk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3Ap
OwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVfZGVjKTsKICAgICAgICAgfQpAQCAt
NzAyLDcgKzczMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3Jj
RHN0KTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3ApOworICAgICAgICAg
ICAgd2Vha2x5UHJlZGljdEludDMyKG9wKTsKICAgICAgICAgICAgIHNldChyZXN1bHQsIG9wKTsK
ICAgICAgICAgICAgIHNldChzcmNEc3QsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwpAQCAtNzE3LDggKzc0Niw4
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IC8vIElmIGJvdGggb3BlcmFuZHMgY2FuIHN0YXRpY2FsbHkgYmUgZGV0ZXJtaW5lZCB0byB0aGUg
bnVtYmVycywgdGhlbiB0aGlzIGlzIGFuIGFyaXRobWV0aWMgYWRkLgogICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCB3ZSBtdXN0IGFzc3VtZSB0aGlzIG1heSBiZSBwZXJmb3JtaW5nIGEgY29uY2F0
ZW5hdGlvbiB0byBhIHN0cmluZy4KICAgICAgICAgICAgIGlmIChpc1NtYWxsSW50MzJDb25zdGFu
dChvcDEpIHx8IGlzU21hbGxJbnQzMkNvbnN0YW50KG9wMikpIHsKLSAgICAgICAgICAgICAgICBz
dGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7Ci0gICAgICAgICAgICAgICAgc3RhdGljYWxseVBy
ZWRpY3RJbnQzMihvcDIpOworICAgICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDEp
OworICAgICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3AxXS5oYXNOdW1lcmljUmVzdWx0KCkgJiYgbV9n
cmFwaFtvcDJdLmhhc051bWVyaWNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFkZCwgdG9OdW1iZXIo
b3AxKSwgdG9OdW1iZXIob3AyKSkpOwpAQCAtNzMyLDggKzc2MSw4IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBn
ZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IE5vZGVJbmRleCBvcDIgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIGlmIChpc1NtYWxsSW50MzJDb25zdGFudChvcDEpIHx8IGlzU21h
bGxJbnQzMkNvbnN0YW50KG9wMikpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMSk7Ci0gICAgICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIp
OworICAgICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDEpOworICAgICAgICAgICAg
ICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTdWIs
IG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwpAQCAtODc4LDEx
ICs5MDcsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUlu
ZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgc3RhdGljYWxseVByZWRpY3RBcnJheShiYXNlKTsKLSAgICAgICAgICAgIHN0YXRp
Y2FsbHlQcmVkaWN0SW50MzIocHJvcGVydHkpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEFy
cmF5KGJhc2UpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKHByb3BlcnR5KTsKIAog
ICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJ
bmZvKDApLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlLCBwcm9wZXJ0eSwgYWxpYXNlcy5sb29r
dXBHZXRCeVZhbChiYXNlLCBwcm9wZXJ0eSkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5VmFsKTsKKyAgICAgICAgICAgIHN0cm9uZ2x5UHJl
ZGljdChnZXRCeVZhbCk7CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5
VmFsKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC04OTIs
OCArOTIyLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5
UHJlZGljdEFycmF5KGJhc2UpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihw
cm9wZXJ0eSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0QXJyYXkoYmFzZSk7CisgICAgICAg
ICAgICB3ZWFrbHlQcmVkaWN0SW50MzIocHJvcGVydHkpOwogCiAgICAgICAgICAgICBOb2RlSW5k
ZXggYWxpYXNlZEdldCA9IGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9
IE5vTm9kZSA/IFB1dEJ5VmFsQWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVl
KTsKQEAgLTkxMiw2ICs5NDIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRNZXRob2QgPSBh
ZGRUb0dyYXBoKEdldE1ldGhvZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJlZGljdE5v
bmUpLCBiYXNlKTsKICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGdldE1ldGhvZCk7CisgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0TWV0aG9kKTsKICAg
ICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0TWV0aG9kKGdldE1ldGhvZCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgob3BfbWV0aG9k
X2NoZWNrKSArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsKQEAgLTkyNSw2ICs5NTYsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeUlkID0gYWRkVG9HcmFwaChHZXRCeUlkLCBPcElu
Zm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5SWQpOworICAgICAgICAg
ICAgc3Ryb25nbHlQcmVkaWN0KGdldEJ5SWQpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRH
ZXRCeUlkKGdldEJ5SWQpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfaWQp
OwpAQCAtMTM1MCw3ICsxMzgyLDcgQEAgYm9vbCBwYXJzZShHcmFwaCYgZ3JhcGgsIEpTR2xvYmFs
RGF0YSogZwogICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogICAgIHJldHVybiBmYWxzZTsK
ICNlbHNlCi0gICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGdsb2JhbERhdGEsIGNvZGVCbG9jaywg
Z3JhcGgpLnBhcnNlKCk7CisgICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGdsb2JhbERhdGEsIGNv
ZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBncmFwaCkucGFyc2UoKTsKICNlbmRp
ZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdEcml2ZXIu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIu
aCIKKyNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR1Byb3BhZ2F0b3Iu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIENvbXBpbGVNb2Rl
IHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKK2lubGluZSBib29sIGNvbXBpbGUo
Q29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxs
ZWVBcmdzRXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgR3JhcGggZGZnKGNv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgaWYg
KCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQorICAgICAg
ICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMsIGNvZGVCbG9jayk7Cisg
ICAgCisgICAgcHJvcGFnYXRlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAKKyAg
ICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7Cisg
ICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikgeworICAgICAgICBBU1NFUlQo
aml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklULmNv
bXBpbGVGdW5jdGlvbihqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoY29tcGlsZU1vZGUgPT0gQ29tcGlsZU90aGVyKTsKKyAgICAg
ICAgQVNTRVJUKCFqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0
YUZsb3dKSVQuY29tcGlsZShqaXRDb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRDb2RlJiBqaXRDb2RlKQoreworICAgIHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhl
YywgMCwgY29kZUJsb2NrLCBqaXRDb2RlLCAwKTsKK30KKworYm9vbCB0cnlDb21waWxlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spCit7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9u
LCBleGVjLCBjYWxsZWVBcmdzRXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdpdGhB
cml0eUNoZWNrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEcml2ZXJfaAorI2RlZmluZSBERkdEcml2
ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBFeGVjU3RhdGU7CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVRDb2RlOworY2xhc3Mg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOworCituYW1lc3BhY2UgREZHIHsKKworI2lmIEVOQUJMRShE
RkdfSklUKQorYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUm
KTsKK2Jvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSogY2FsbGVl
QXJnc0V4ZWMsIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGpp
dENvZGVXaXRoQXJpdHlDaGVjayk7CisjZWxzZQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZShFeGVj
U3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBi
b29sIHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBFeGVjU3RhdGUqLCBDb2RlQmxvY2sq
LCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0KKyNl
bmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZgorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIx
LDYgKzEyMSwxMCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAg
ICAgfQogICAgIGlmIChvcCA9PSBKU0NvbnN0YW50KSB7CiAgICAgICAgIHByaW50ZigiJXMkJXUi
LCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmNvbnN0YW50TnVtYmVyKCkpOworICAgICAg
ICBpZiAoY29kZUJsb2NrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1
ZU9mSlNDb25zdGFudChjb2RlQmxvY2spOworICAgICAgICAgICAgcHJpbnRmKCIgPSAlcyIsIHZh
bHVlLmRlc2NyaXB0aW9uKCkpOworICAgICAgICB9CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7CkBA
IC0xODYsMTcgKzE5MCw0NyBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3Ap
CiAgICAgfQogfQogCi12b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUq
IGV4ZWMpCit2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9
IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQ
cmVkaWN0aW9ucy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgbnVt
YmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9
IGV4ZWMtPmFyZ3VtZW50KGFyZyAtIDEpOwotICAgICAgICBpZiAoYXJndW1lbnRWYWx1ZS5pc0lu
dDMyKCkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9
IFByZWRpY3RJbnQzMjsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgp
KQotICAgICAgICAgICAgbV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVk
aWN0RG91YmxlOworICAgIGlmIChleGVjKSB7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3Vt
ZW50cyA9IHN0ZDo6bWluKGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJn
dW1lbnRQcmVkaWN0aW9ucy5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3Qg
YXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIGFyZ3VtZW50VmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKKyAgICAgICAg
ICAgIGlmIChhcmd1bWVudFZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGFyZ3VtZW50VmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBtX2Fy
Z3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIEFT
U0VSVChjb2RlQmxvY2spOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKTsKKwor
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBD
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwor
ICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA+PSAxKTsKKyAgICBmb3IgKHNp
emVfdCBhcmcgPSAxOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1Q
YXJhbWV0ZXJzKTsgKythcmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJv
ZmlsZWRDb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIGlm
ICghcHJvZmlsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfREVC
VUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIkFyZ3VtZW50IHByb2ZpbGUgWyVsdV06ICIsIGFy
Zyk7CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIp
OworI2VuZGlmCisgICAgICAgIAorICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFBy
ZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2Zp
bGUpKTsKKyAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCIg
ICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2FyZ3VtZW50UHJlZGlj
dGlvbnNbYXJnXS5tX3ZhbHVlKSk7CisjZW5kaWYKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShjb2RlQmxvY2spOworI2VuZGlmCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0NTM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw4ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPFJlZ2lz
dGVyRmlsZS5oPgotI2luY2x1ZGUgPGRmZy9ERkdOb2RlLmg+CisjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTEzNSwxMiArMTM2LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuICptX2Jsb2Nrc1tibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVC
ZWdpbildOwogICAgIH0KIAotICAgIHZvaWQgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRp
Y3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJj
ZSBzb3VyY2UpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRQ
cmVkaWN0aW9ucy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0g
ICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50
XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVu
dFByZWRpY3Rpb25zW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9u
LCBzb3VyY2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCh1bnNpZ25lZClv
cGVyYW5kID49IG1fdmFyaWFibGVQcmVkaWN0aW9ucy5zaXplKCkpIHsKQEAgLTE0OCwzNyArMTQ4
LDM3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fdmFyaWFibGVQcmVkaWN0aW9ucy5yZXNpemUo
b3BlcmFuZCArIDEpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtZXJnZVByZWRpY3Rp
b24obV92YXJpYWJsZVByZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1f
dmFyaWFibGVQcmVkaWN0aW9uc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVk
aWN0aW9uLCBzb3VyY2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0R2xvYmFsVmFy
KHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9u
U291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVt
YmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQog
ICAgIHsKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRv
ciBpdGVyID0gbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5maW5kKHZhck51bWJlciArIDEpOwogICAg
ICAgICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmVuZCgpKSB7CiAgICAgICAg
ICAgICBQcmVkaWN0aW9uU2xvdCBwcmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIG1lcmdlUHJl
ZGljdGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9u
LCBzb3VyY2UpKTsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9uKHBy
ZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OwogICAgICAgICAgICAgbV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5hZGQodmFyTnVtYmVyICsgMSwg
cHJlZGljdGlvblNsb3QpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1h
a2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIG1l
cmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGlj
dGlvbiwgc291cmNlKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBub2Rl
LCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAg
IGJvb2wgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRp
Y3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICBwcmVkaWN0KG5vZGUubG9jYWwoKSwg
cHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9j
YWwoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJO
dW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlv
biwgc291cmNlKTsKICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhv
ZDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBj
YXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3Vy
Y2UpOworICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2Up
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIyNiwxMiArMjI2LDQzIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKICAgICAgICAgfQogICAgIH0KKyAg
ICAKKyAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgor
ICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGF0KG5vZGVJbmRleCkuaXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSlND
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5v
ZGVJbmRleCkuaXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhdChub2RlSW5kZXgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2spOworICAgIH0K
KyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJs
ZUNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBj
b25zdGFudCB2YWx1ZXMgZnJvbSBub2Rlcy4KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50
KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAg
ICB9CisgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5k
ZXgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGRvdWJsZSB2
YWx1ZU9mRG91YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mRG91Ymxl
Q29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGlj
IGNvbnN0IGNoYXIgKm9wTmFtZShOb2RlVHlwZSk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlZGlj
dEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKik7CisgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBl
cyhFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxv
Y2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hp
bGRyZW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEzLDYgKzkxMyw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5m
byA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxsID0g
bV9qc0NhbGxzW2ldLm1faXNDYWxsOworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQ
YXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9D
aGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
NywzOSArMjA3LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0
byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdyYXBoKClbbm9kZUluZGV4XS5p
c0NvbnN0YW50KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29uc3Rh
bnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1
ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0Rv
dWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4g
aXNKU0NvbnN0YW50KG5vZGVJbmRleCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5p
c051bWJlcigpOwotICAgIH0KKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gZ3JhcGgoKS5pc0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlz
SlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlNDb25z
dGFudChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5v
ZGVJbmRleCk7IH0KKyAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5k
ZXgpOyB9CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5v
ZGVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBncmFwaCgpW25vZGVJbmRleF0uY29uc3RhbnROdW1i
ZXIoKTsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnRJbmRleCkuZ2V0KCk7Ci0gICAgfQotICAg
IGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKLSAgICB9Ci0gICAg
ZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwot
ICAgIH0KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRl
eCk7IH0KKyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5v
ZGVJbmRleCk7IH0KKyAgICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVCbG9j
aygpLCBub2RlSW5kZXgpOyB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBk
eW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBERkdfSklU
X0FTU0VSVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0
NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDYgKzU0LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpAQCAtMTk1LDE0ICsxOTgsMTUgQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUg
UHJlZGljdEFycmF5IAogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICA9
IDB4MDQ7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RG91YmxlID0gMHgwODsK
IHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIgPSAweDBjOwotc3RhdGlj
IGNvbnN0IFByZWRpY3RlZFR5cGUgRHluYW1pY1ByZWRpY3Rpb25UYWcgPSAweDgwOworc3RhdGlj
IGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdFRvcCAgICA9IDB4MGY7CitzdGF0aWMgY29uc3Qg
UHJlZGljdGVkVHlwZSBTdHJvbmdQcmVkaWN0aW9uVGFnID0gMHg4MDsKIHN0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3Rpb25UYWdNYXNrICAgID0gMHg4MDsKIAotZW51bSBQcmVkaWN0
aW9uU291cmNlIHsgU3RhdGljUHJlZGljdGlvbiwgRHluYW1pY1ByZWRpY3Rpb24gfTsKK2VudW0g
UHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBTdHJvbmdQcmVkaWN0aW9uIH07CiAK
IGlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYmICEodmFsdWUg
JiB+UHJlZGljdEFycmF5KTsKKyAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFBy
ZWRpY3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7CiB9CiAKIGlubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFs
dWUpCkBAIC0yMjIsNjAgKzIyNiwxMDcgQEAgaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9u
KFByZWRpY3RlZAogCiBpbmxpbmUgYm9vbCBpc051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkVHlw
ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZh
bHVlICYgflByZWRpY3ROdW1iZXIpOworICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1i
ZXIpICYmICEodmFsdWUgJiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwog
fQogCi1pbmxpbmUgYm9vbCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
CitpbmxpbmUgYm9vbCBpc1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsK
LSAgICBBU1NFUlQodmFsdWUgIT0gKFByZWRpY3ROb25lIHwgRHluYW1pY1ByZWRpY3Rpb25UYWcp
KTsKLSAgICByZXR1cm4gISEodmFsdWUgJiBEeW5hbWljUHJlZGljdGlvblRhZyk7CisgICAgQVNT
RVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpKTsKKyAgICBy
ZXR1cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKIH0KIAorI2lmbmRlZiBOREVC
VUcKK2lubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2
YWx1ZSkKK3sKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZhbHVlKSkgeworICAgICAgICBz
d2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7CisgICAgICAgIGNhc2UgUHJlZGlj
dE5vbmU6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJvdHRvbSI7CisgICAgICAgIGNh
c2UgUHJlZGljdENlbGw6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWNlbGwiOworICAg
ICAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYXJy
YXkiOworICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiAicC1z
dHJvbmctaW50MzIiOworICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6CisgICAgICAgICAgICBy
ZXR1cm4gInAtc3Ryb25nLW51bWJlciI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gInAtc3Ryb25nLXRvcCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1
ZSkgeworICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRv
bSI7CisgICAgY2FzZSBQcmVkaWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7
CisgICAgY2FzZSBQcmVkaWN0QXJyYXk6CisgICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsK
KyAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOwor
ICAgIGNhc2UgUHJlZGljdE51bWJlcjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstbnVtYmVyIjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gInAtd2Vhay10b3AiOworICAgIH0KK30KKyNl
bmRpZgorCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5
cGUgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKLSAgICBpZiAoaXNEeW5hbWljUHJlZGlj
dGlvbihsZWZ0KSA9PSBpc0R5bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSkKKyAgICBpZiAoaXNTdHJv
bmdQcmVkaWN0aW9uKGxlZnQpID09IGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpCiAgICAgICAg
IHJldHVybiBsZWZ0IHwgcmlnaHQ7Ci0gICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkp
IHsKLSAgICAgICAgQVNTRVJUKCFpc0R5bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgaWYg
KGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSkgeworICAgICAgICBBU1NFUlQoIWlzU3Ryb25nUHJl
ZGljdGlvbihyaWdodCkpOwogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9Ci0gICAgQVNTRVJU
KCFpc0R5bmFtaWNQcmVkaWN0aW9uKGxlZnQpKTsKLSAgICBBU1NFUlQoaXNEeW5hbWljUHJlZGlj
dGlvbihyaWdodCkpOworICAgIEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKKyAg
ICBBU1NFUlQoaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSk7CiAgICAgcmV0dXJuIHJpZ2h0Owog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFQm
IGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQpCitpbmxpbmUgYm9vbCBtZXJnZVByZWRpY3Rpb24o
VCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKLSAgICBsZWZ0ID0gc3RhdGljX2Nhc3Q8
VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KSwgcmln
aHQpKTsKKyAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBzdGF0aWNfY2FzdDxUPiht
ZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpLCByaWdodCkp
OworICAgIGJvb2wgcmVzdWx0ID0gbmV3UHJlZGljdGlvbiAhPSBzdGF0aWNfY2FzdDxQcmVkaWN0
ZWRUeXBlPihsZWZ0KTsKKyAgICBsZWZ0ID0gbmV3UHJlZGljdGlvbjsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHR5cGUsIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogewotICAgIEFTU0VSVCghKHR5cGUg
JiBEeW5hbWljUHJlZGljdGlvblRhZykpOwotICAgIEFTU0VSVChzb3VyY2UgPT0gRHluYW1pY1By
ZWRpY3Rpb24gfHwgc291cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pOworICAgIEFTU0VSVCghKHR5
cGUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKSk7CisgICAgQVNTRVJUKHNvdXJjZSA9PSBTdHJvbmdQ
cmVkaWN0aW9uIHx8IHNvdXJjZSA9PSBXZWFrUHJlZGljdGlvbik7CiAgICAgaWYgKHR5cGUgPT0g
UHJlZGljdE5vbmUpCiAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICByZXR1cm4gdHlw
ZSB8IChzb3VyY2UgPT0gRHluYW1pY1ByZWRpY3Rpb24gPyBEeW5hbWljUHJlZGljdGlvblRhZyA6
IDApOworICAgIHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uID8gU3Ry
b25nUHJlZGljdGlvblRhZyA6IDApOwogfQogCi0jaWZuZGVmIE5ERUJVRwotaW5saW5lIGNvbnN0
IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBlIHZhbHVlKQorI2lmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKK2lubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVmFsdWVQcm9maWxlJiBwcm9maWxlKQogewot
ICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICByZXR1
cm4gInAtYm90dG9tIjsKLSAgICBjYXNlIFByZWRpY3RDZWxsOgotICAgICAgICByZXR1cm4gInAt
Y2VsbCI7Ci0gICAgY2FzZSBQcmVkaWN0QXJyYXk6Ci0gICAgICAgIHJldHVybiAicC1hcnJheSI7
Ci0gICAgY2FzZSBQcmVkaWN0SW50MzI6Ci0gICAgICAgIHJldHVybiAicC1pbnQzMiI7Ci0gICAg
Y2FzZSBQcmVkaWN0TnVtYmVyOgotICAgICAgICByZXR1cm4gInAtbnVtYmVyIjsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gInAtdG9wIjsKLSAgICB9CisgICAgVmFsdWVQcm9maWxlOjpT
dGF0aXN0aWNzIHN0YXRpc3RpY3M7CisgICAgcHJvZmlsZS5jb21wdXRlU3RhdGlzdGljcyhnbG9i
YWxEYXRhLCBzdGF0aXN0aWNzKTsKKyAgICAKKyAgICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykK
KyAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmlu
dDMycyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0
aW9uVGFnIHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3REb3VibGU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3Rh
dGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0
cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0TnVtYmVyOworICAgIAorICAgIGlmIChzdGF0aXN0
aWNzLmFycmF5cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmNl
bGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgfCBQcmVkaWN0Q2VsbDsKKyAgICAKKyAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RUb3A7CiB9CiAjZW5kaWYKIApAQCAtMzU2LDYgKzQwNywzMyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIEFTU0VSVChpc0NvbnN0YW50KCkpOwogICAgICAgICByZXR1cm4gbV9v
cEluZm87CiAgICAgfQorICAgIAorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnROdW1iZXIoKSku
Z2V0KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KENvZGVCbG9jayog
Y29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9m
SlNDb25zdGFudChjb2RlQmxvY2spLmlzSW50MzIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0RvdWJsZUNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmlzTnVtYmVy
KCk7CisgICAgfQorICAgIAorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGNv
ZGVCbG9jaykpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5h
c0ludDMyKCk7CisgICAgfQorCisgICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0RvdWJsZUNvbnN0YW50
KGNvZGVCbG9jaykpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2Nr
KS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICB9CiAKICAgICBib29sIGhhc0xvY2FsKCkKICAg
ICB7CkBAIC00NzAsMjQgKzU0OCwyNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihtX29wSW5mbzIpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNv
dXJjZSkKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0
aW9uU291cmNlIHNvdXJjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNQcmVkaWN0aW9uKCkp
OwogICAgICAgICAKICAgICAgICAgLy8gV2UgaGF2ZSBwcmV2aW91c2x5IGZvdW5kIGVtcGlyaWNh
bGx5IHRoYXQgYXNjcmliaW5nIHN0YXRpYyBwcmVkaWN0aW9ucwogICAgICAgICAvLyB0byBoZWFw
IGxvYWRzIGFzIHdlbGwgYXMgY2FsbHMgaXMgbm90IHByb2ZpdGFibGUsIGFzIHRoZXNlIHByZWRp
Y3Rpb25zCiAgICAgICAgIC8vIGFyZSB3cm9uZyB0b28gb2Z0ZW4uIEhlbmNlLCB0aGlzIGNvbXBs
ZXRlbHkgaWdub3JlcyBzdGF0aWMgcHJlZGljdGlvbnMuCi0gICAgICAgIGlmIChzb3VyY2UgPT0g
U3RhdGljUHJlZGljdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHNvdXJj
ZSA9PSBXZWFrUHJlZGljdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
CiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgQVNTRVJU
KHNvdXJjZSA9PSBEeW5hbWljUHJlZGljdGlvbik7CisgICAgICAgIEFTU0VSVChzb3VyY2UgPT0g
U3Ryb25nUHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICBtX29wSW5mbzIgfD0gRHluYW1p
Y1ByZWRpY3Rpb25UYWcgfCBwcmVkaWN0aW9uOworICAgICAgICBQcmVkaWN0ZWRUeXBlIG5ld1By
ZWRpY3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgcHJlZGljdGlvbjsKKyAgICAgICAgYm9v
bCByZXN1bHQgPSBtX29wSW5mbzIgIT0gbmV3UHJlZGljdGlvbjsKKyAgICAgICAgbV9vcEluZm8y
IHw9IG5ld1ByZWRpY3Rpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAg
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBB
U1NFUlQoaGFzUmVzdWx0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1Byb3BhZ2F0b3IuaCIKKworI2lmIEVOQUJMRShERkdfSklUKSAm
JiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByb3BhZ2F0b3Igewor
cHVibGljOgorICAgIFByb3BhZ2F0b3IoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2spCisg
ICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0
YSkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9maWxl
ZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgeworICAgICAgICBtX3ByZWRpY3Rpb25zLnJlc2l6
ZShtX2dyYXBoLnNpemUoKSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAwOyBpIDwgbV9n
cmFwaC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0
Tm9uZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhwb2ludCgpCisgICAgeworI2lmIERGR19E
RUJVR19WRVJCT1NFCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBi
b3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBj
b2RlLgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdh
dGVGb3J3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRp
b24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAg
ICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25l
cykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0
dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50Cisg
ICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3Vp
dHMgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICAgICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEbyBh
bm90aGVyIGZvcndhcmQgcGFzcyBiZWNhdXNlIGZvcndhcmQgcGFzc2VzIGFyZSBvbiBhdmVyYWdl
IG1vcmUKKyAgICAgICAgICAgIC8vIHByb2ZpdGFibGUuCisgICAgICAgICAgICBtX2NoYW5nZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgfSB3aGls
ZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0UHJlZGlj
dGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV9wcmVk
aWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gPT0gcHJlZGljdGlvbikKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID0gcHJl
ZGljdGlvbjsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhd
LCBwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9k
ZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24o
UHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2
YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgZWxz
ZSBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZtX2dsb2JhbERh
dGEsIGNlbGwpKQorICAgICAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKFByZWRpY3RBcnJheSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVk
aWN0Q2VsbCwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQ
cmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbiA9IG1fZ3JhcGguZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICAg
ICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBt
ZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIG1f
Y2hhbmdlZCB8PSBtX2dyYXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25zW25v
ZGUuY2hpbGQxKCldICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBC
aXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAg
ICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2Ug
Qml0VVJTaGlmdDoKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgY2FzZSBW
YWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgVmFsdWVUb051bWJlcjogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc051bWJlclByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgICAg
IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVt
YmVyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAg
ICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEo
KV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2Rl
LmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGlj
dGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVBy
ZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdl
UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0
ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGlj
dGlvbnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9u
KG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQ
cmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBcml0aERpdjogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAg
ICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAg
ICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNhZCwgYXMg
d2UgZG9uJ3QgaGF2ZSBhIGJvb2xlYW4gcHJlZGljdGlvbiwgZXZlbiB0aG91Z2ggd2UgZWFzaWx5
CisgICAgICAgICAgICAvLyBjb3VsZC4KKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAg
ICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNl
IENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7CisgICAgICAgICAgICBpZiAoaXNTdHJv
bmdQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAg
ICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgU3Ryb25nUHJl
ZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uID0gbV9ncmFwaC5nZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVy
KCkpOworICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
OiB7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5v
ZGUudmFyTnVtYmVyKCksIG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlv
blRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gVGhlc2UgZ2V0IGln
bm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBjYXNlIERGRzo6
SnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAg
ICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2Fz
ZSBDaGVja0hhc0luc3RhbmNlOgorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2Ugd2Ug
ZG9uJ3QgaGF2ZSBwcm9maWxpbmcgZm9yIHRoZW0sIHlldC4KKyAgICAgICAgY2FzZSBSZXNvbHZl
OgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3Ry
aWN0UHV0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisjZWxzZQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQorICAgIHsK
KyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICBwcmludGYoIlByb3BhZ2F0aW5nIGZvcndh
cmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKG1fY29tcGlsZUlu
ZGV4ID0gMDsgbV9jb21waWxlSW5kZXggPCBtX2dyYXBoLnNpemUoKTsgKyttX2NvbXBpbGVJbmRl
eCkKKyAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUJhY2t3YXJkKCkKKyAgICB7CisjaWYgREZH
X0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBiYWNrd2FyZCBbJXVd
XG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBt
X2dyYXBoLnNpemUoKTsgbV9jb21waWxlSW5kZXgtLSA+IDA7KQorICAgICAgICAgICAgcHJvcGFn
YXRlTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIEdyYXBo
JiBtX2dyYXBoOworICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgCisg
ICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIAorICAgIFZlY3RvcjxQcmVkaWN0ZWRU
eXBlLCAxNj4gbV9wcmVkaWN0aW9uczsKKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgdW5z
aWduZWQgbV9jb3VudDsKKyNlbmRpZgorICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKwor
dm9pZCBwcm9wYWdhdGUoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBBU1NF
UlQocHJvZmlsZWRCbG9jayk7CisgICAgCisgICAgUHJvcGFnYXRvciBwcm9wYWdhdG9yKGdyYXBo
LCAqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBwcm9maWxlZEJsb2NrKTsKKyAgICBwcm9wYWdhdG9y
LmZpeHBvaW50KCk7CisgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICBncmFwaC5kdW1w
KGNvZGVCbG9jayk7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Byb3BhZ2F0b3JfaAorI2RlZmluZSBERkdQcm9w
YWdhdG9yX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8ZGZnL0RGR0dyYXBo
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKU0dsb2Jh
bERhdGE7CisKK25hbWVzcGFjZSBERkcgeworCisvLyBQcm9wYWdhdGUgZHluYW1pYyBwcmVkaWN0
aW9ucyBmcm9tIHZhbHVlIHNvdXJjZXMgdG8gdmFyaWFibGVzLgorI2lmIEVOQUJMRShEWU5BTUlD
X09QVElNSVpBVElPTikKK3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29k
ZUJsb2NrKik7CisjZWxzZQoraW5saW5lIHZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxE
YXRhKiwgQ29kZUJsb2NrKikgeyB9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsOSBAQCB2b2lkIGRm
Z0xpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGluCiAgICAgICAgIEFTU0VSVCghY2FsbExp
bmtJbmZvLmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVj
LT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4s
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxl
ZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbCgmY2FsbExpbmtJbmZvKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hhbmRsZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IYW5kbGVIZWFwLmgJKHJldmlzaW9uIDk0NTM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNiArMjE4LDgg
QEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVhcAogICAgIDogbV9oYW5k
bGVIZWFwKGhhbmRsZUhlYXApCiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3du
ZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkBA
IC0yMjUsNiArMjI3LDggQEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50
aQogICAgIDogbV9oYW5kbGVIZWFwKDApCiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93
ZWFrT3duZXJDb250ZXh0KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDUzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
NiArOTMsMTYgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogewog
fQogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKK3ZvaWQgSklUOjplbWl0T3B0aW1p
emF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kIGtpbmQpCit7CisgICAgSnVtcCBza2lw
T3B0aW1pemUgPSBicmFuY2hBZGQzMkFic29sdXRlKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQg
PT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gMSA6IDMwKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2Nv
ZGVCbG9jay0+bV9leGVjdXRlQ291bnRlcikpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gY3RpX29wdGltaXplX2Zyb21fbG9v
cCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIHNr
aXBPcHRpbWl6ZS5saW5rKHRoaXMpOworfQorI2VuZGlmCisKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQogewpAQCAtMTAyLDYgKzExMiw4IEBAIHZv
aWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBzdHViQ2FsbC5jYWxsKHRpbWVvdXRDaGVj
a1JlZ2lzdGVyKTsKICAgICBzdHViQ2FsbC5nZXRBcmd1bWVudCgwLCByZWdUMSwgcmVnVDApOyAv
LyByZWxvYWQgbGFzdCByZXN1bHQgcmVnaXN0ZXJzLgogICAgIHNraXBUaW1lb3V0LmxpbmsodGhp
cyk7CisgICAgCisgICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExvb3BPcHRpbWl6YXRpb25DaGVj
ayk7CiB9CiAjZWxzZQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQpAQCAtMTExLDYgKzEy
Myw4IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBza2lwVGltZW91dC5saW5r
KHRoaXMpOwogCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworICAgIAorICAgIGVtaXRP
cHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2VuZGlmCiAKQEAg
LTYyMyw3ICs2MzcsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIGZ1
bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAgICAgICAqZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sg
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotCisgICAgCiAgICAgcmV0dXJu
IEpJVENvZGUocGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCksIEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKIH0KIApAQCAtNjM3LDYgKzY1MSw5IEBAIHZvaWQgSklUOjpsaW5rRm9yKEpTRnVuY3Rpb24q
IGNhbGxlZSwgQ28KICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwog
ICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQoKmdsb2JhbERhdGEsIGNhbGxMaW5rSW5m
by0+aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxs
ZWUpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmhvdFBhdGhP
dGhlciwgY29kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAg
ICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxMaW5rSW5mbyk7
CiAgICAgfQogCiAgICAgLy8gcGF0Y2ggdGhlIGNhbGwgc28gd2UgZG8gbm90IGNvbnRpbnVlIHRv
IHRyeSB0byBsaW5rLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5NDUz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTk3Miw2ICs5NzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIExvYWRzIHRoZSBj
aGFyYWN0ZXIgdmFsdWUgb2YgYSBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZyBpbnRvIGRzdC4KICAg
ICAgICAgdm9pZCBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcyk7CiAgICAgICAgIAorICAgICAgICBlbnVtIE9w
dGltaXphdGlvbkNoZWNrS2luZCB7IExvb3BPcHRpbWl6YXRpb25DaGVjaywgUmV0T3B0aW1pemF0
aW9uQ2hlY2sgfTsKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICB2b2lk
IGVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YXRpb25DaGVja0tpbmQpOworI2Vsc2UKKyAg
ICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemF0aW9uQ2hlY2tLaW5kKSB7
IH0KKyNlbmRpZgorICAgICAgICAKICAgICAgICAgdm9pZCBlbWl0VGltZW91dENoZWNrKCk7CiAj
aWZuZGVmIE5ERUJVRwogICAgICAgICB2b2lkIHByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXModW5z
aWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEw
Niw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsVmFyYXJnc1Nsb3dDYXNlKEkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
ZW1pdE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsKKyAgICAKICAgICB1
bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCiAgICAgZW1p
dExvYWQoZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtMTE4LDYgKzEyMCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmUKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29i
amVjdF9vcl90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgZW1p
dE9wdGltaXphdGlvbkNoZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsKKyAgICAKICAgICB1bnNp
Z25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2ln
bmVkIHRoaXNSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjMgKzI3
LDUwIEBACiAjZGVmaW5lIEpJVENvZGVfaAogCiAjaWYgRU5BQkxFKEpJVCkKLQogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJQcm9maWxlci5oIgorI2VuZGlmCiAKIG5hbWVzcGFj
ZSBKU0MgewogCisjaWYgRU5BQkxFKEpJVCkKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAg
Y2xhc3MgUmVnaXN0ZXJGaWxlOworI2VuZGlmCiAgICAgCiAgICAgY2xhc3MgSklUQ29kZSB7Cisj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29k
ZVJlZjsKICAgICAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKKyNl
bHNlCisgICAgICAgIEpJVENvZGUoKSB7IH0KKyNlbmRpZgogICAgIHB1YmxpYzoKICAgICAgICAg
ZW51bSBKSVRUeXBlIHsgSG9zdENhbGxUaHVuaywgQmFzZWxpbmVKSVQsIERGR0pJVCB9OwotCisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKKyAgICAgICAg
eworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgICAgICByZXR1cm4gQmFz
ZWxpbmVKSVQ7CisjZWxzZQorICAgICAgICAgICAgcmV0dXJuIERGR0pJVDsKKyNlbmRpZgorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIERGR0pJVDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc3RhdGljIEpJVFR5cGUgbmV4dFRpZXJKSVQoSklUVHlwZSBqaXRUeXBlKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGppdFR5cGUsIGppdFR5cGUgPT0gQmFz
ZWxpbmVKSVQgfHwgaml0VHlwZSA9PSBERkdKSVQpOworICAgICAgICAgICAgcmV0dXJuIERGR0pJ
VDsKKyAgICAgICAgfQorICAgICAgICAKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICBKSVRDb2Rl
KCkKICAgICAgICAgewogICAgICAgICB9CkBAIC01Myw3ICs4MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgewogICAgICAgICB9
Ci0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgb3BlcmF0b3IgISgpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiAhbV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBA
IC0xMjQsMTAgKzE1MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIENvZGVSZWYgbV9y
ZWY7CiAgICAgICAgIEpJVFR5cGUgbV9qaXRUeXBlOworI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAg
ICAgfTsKIAogfTsKIAogI2VuZGlmCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw2ICs0NTIs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVudHMoSW5zCiAKIHZvaWQgSklU
OjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVt
aXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgQVNT
RVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKICAgICBBU1NFUlQocmVnVDEgIT0gcmV0
dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgIT0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwpAQCAtNDcyLDYgKzQ3NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChJbnN0cnVjdGlvbiogY3VycmUKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90
aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgZW1pdE9wdGltaXph
dGlvbkNoZWNrKFJldE9wdGltaXphdGlvbkNoZWNrKTsKKyAgICAKICAgICBBU1NFUlQoY2FsbEZy
YW1lUmVnaXN0ZXIgIT0gcmVnVDEpOwogICAgIEFTU0VSVChyZWdUMSAhPSByZXR1cm5WYWx1ZVJl
Z2lzdGVyKTsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVSZWdpc3RlciAhPSBjYWxsRnJhbWVSZWdp
c3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgxNiw2ICsxODE2LDMyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX2NoZWNrX2hhc18KICAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7CiB9CiAK
K0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb21fbG9vcCkKK3sKKyAgICBT
VFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisgICAgCisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKworICAgIEpTT2JqZWN0KiBlcnJvciA9IGNv
ZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOworICAgIGlm
IChlcnJvcikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBvcHRpbWl6ZWQgY29t
cGlsYXRpb24gZnJvbSBsb29wIGZhaWxlZC5cbiIpOworfQorCitERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcHRpbWl6ZV9mcm9tX3JldCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUo
c3RhY2tGcmFtZSk7CisgICAgCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1l
LmNhbGxGcmFtZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3Bl
Q2hhaW4oKTsKKworICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGlt
aXplZChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOworICAgIGlmIChlcnJvcikKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZnJvbSByZXQgZmFp
bGVkLlxuIik7Cit9CisKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9p
bnN0YW5jZW9mKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDk0NTM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MjMsNiArNDIzLDggQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVh
cl9vZmZfYWN0aXZhdGlvbihTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NU
VUIgY3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAg
IHZvaWQgSklUX1NUVUIgY3RpX29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcihTVFVCX0FSR1NfREVD
TEFSQVRJT04pOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wdGltaXplX2Zyb21fbG9vcChTVFVC
X0FSR1NfREVDTEFSQVRJT04pOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wdGltaXplX2Zyb21f
cmV0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3RpX29wX2Nh
bGxfYXJpdHlDaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVC
IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAg
IHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2ppdENvbXBpbGUoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiA5NDUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2NiArMjgsMTYgQEAKIAogI2luY2x1
ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAj
aW5jbHVkZSAiVVN0cmluZ0J1aWxkZXIuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAotI2lmIEVO
QUJMRShERkdfSklUKQotI2luY2x1ZGUgIkRGR0J5dGVDb2RlUGFyc2VyLmgiCi0jaW5jbHVkZSAi
REZHSklUQ29tcGlsZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xh
c3NJbmZvIEV4ZWN1dGFibGVCYXNlOjpzX2luZm8gPSB7ICJFeGVjdXRhYmxlIiwgMCwgMCwgMCB9
OwogCi0jaWYgRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUoREZHX0pJVCkKLXN0YXRpYyBib29sIHRy
eURGR0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29k
ZSYgaml0Q29kZSkKLXsKLSNpZiBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0gICAgLy8g
RklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQgc3VwcG9ydGVkLCBkb24ndCBib3RoZXIgc2Nhbm5p
bmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFyZSBhbnkganVtcCB0YXJnZXRzLgotICAgIGlmIChj
b2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9OUykKLQotICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgREZHOjpHcmFwaCBkZmco
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKLSAgICBp
ZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgREZHOjpKSVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcs
IGNvZGVCbG9jayk7Ci0gICAgZGF0YUZsb3dKSVQuY29tcGlsZShqaXRDb2RlKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0
eUNoZWNrKQotewotI2lmIEVOQUJMRShERkdfSklUX1JFU1RSSUNUSU9OUykKLSAgICAvLyBGSVhN
RTogTm8gZmxvdyBjb250cm9sIHlldCBzdXBwb3J0ZWQsIGRvbid0IGJvdGhlciBzY2FubmluZyB0
aGUgYnl0ZWNvZGUgaWYgdGhlcmUgYXJlIGFueSBqdW1wIHRhcmdldHMuCi0gICAgaWYgKGNvZGVC
bG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQotCi0gICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBERkc6OkdyYXBoIGRmZyhjb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZhcnMpOwotICAgIGlmICgh
cGFyc2UoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxvY2spKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoY2FsbGVlQXJnc0V4ZWMpCi0gICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRU
eXBlcyhjYWxsZWVBcmdzRXhlYyk7Ci0KLSAgICBERkc6OkpJVENvbXBpbGVyIGRhdGFGbG93SklU
KGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKLSAgICBkYXRhRmxvd0pJVC5jb21waWxlRnVu
Y3Rpb24oaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQotc3RhdGljIGJvb2wgdHJ5REZHQ29tcGlsZShF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KLXN0YXRp
YyBib29sIHRyeURGR0NvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqLCBFeGVjU3RhdGUqLCBDb2Rl
QmxvY2sqLCBKSVRDb2RlJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7
IH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotICAg
IAogdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKIHsKICNpZiBFTkFCTEUoSklUKQpA
QCAtMTY2LDggKzExNiwxOCBAQCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJs
ZShFCiB7CiB9CiAKK0pTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBB
U1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VS
VCghIW1fZXZhbENvZGVCbG9jayk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBpZiAo
bV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQor
ICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklU
Q29kZTo6bmV4dFRpZXJKSVQobV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBB
U1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOworICAgIHJldHVybiBlcnJvcjsKK30KIAotSlNPYmpl
Y3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNv
bXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQogewogICAgIEpTT2JqZWN0KiBleGNlcHRp
b24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CkBAIC0xODMsMjYgKzE0Myw0MSBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlcm5hCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFp
bk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFTU0VSVCghbV9ldmFsQ29kZUJsb2Nr
KTsKLSAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlz
LCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlQ2hhaW5Ob2RlLT5sb2Nh
bERlcHRoKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9w
dFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2Rl
LCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSkp
KTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fZXZhbENvZGVC
bG9jay5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRp
ZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX2V2YWxDb2RlQmxvY2sgPSBh
ZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnBy
b3ZpZGVyKCksIHNjb3BlQ2hhaW5Ob2RlLT5sb2NhbERlcHRoKCksIHByZXZpb3VzQ29kZUJsb2Nr
LnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFk
b3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5v
ZGUsIG1fZXZhbENvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJsb2NrLmdldCgp
LCAhIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpP
cHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlv
bikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAg
ICAgICAgbV9ldmFsQ29kZUJsb2NrLmNsZWFyKCk7CisgICAgICAgIG1fZXZhbENvZGVCbG9jayA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxl
YXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOwogICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KIAogICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0
YSgpOworICAgIG1fZXZhbENvZGVCbG9jay0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkg
ewotICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gdHJ5REZHQ29tcGlsZShleGVjLCBtX2V2YWxD
b2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwpOwotICAgICAgICBpZiAoIWRmZ0NvbXBp
bGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CisgICAgICAgIGlmIChqaXRU
eXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0gREZHOjp0
cnlDb21waWxlKGV4ZWMsIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7
CisgICAgICAgIGlmIChkZmdDb21waWxlZCkKKyAgICAgICAgICAgIEFTU0VSVCghbV9ldmFsQ29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpIHx8ICFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
Pmhhc0luY29taW5nQ2FsbHMoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG1f
ZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZXJl
IGlzIGFscmVhZHkgYW4gYWx0ZXJuYXRpdmUgcGllY2Ugb2YgY29kZSBjb21waWxlZCB3aXRoIGEg
ZGlmZmVyZW50CisgICAgICAgICAgICAgICAgLy8gSklULCBzbyB3ZSBjYW4gc2lsZW50bHkgZmFp
bC4KKyAgICAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0
PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwor
ICAgICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERh
dGEsIG1fZXZhbENvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIH0KICNpZiAhRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0
ZWRDb2RlKCkpCiAgICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmRpc2NhcmRCeXRlY29kZSgp
OwogI2VuZGlmCisgICAgICAgIG1fZXZhbENvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGVG
b3JDYWxsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTI2
MSwxMCArMjM2LDE5IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgK
ICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCi1KU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSkKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKIHsKLSAgICBB
U1NFUlQoIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX3Byb2dyYW1Db2RlQmxvY2sp
OworICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+
Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBj
b21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklU
KG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJUKCEhbV9wcm9n
cmFtQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAKK0pTT2JqZWN0KiBQcm9ncmFt
RXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCit7CiAgICAgSlNP
YmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTI3NywyNSArMjYxLDQwIEBAIEpT
T2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKIAogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwog
ICAgIAotICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJs
b2NrKHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSkp
OwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBC
eXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsICZnbG9i
YWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpKTsKKyAg
ICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fcHJvZ3JhbUNvZGVCbG9j
ay5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJK
SVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBh
ZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmpl
Y3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwor
ICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRl
Y29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsICZnbG9iYWxP
YmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dy
YW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemlu
Z0NvbXBpbGF0aW9uIDogQnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAg
ICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1f
cHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jay0+
cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEo
KTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBwcm9ncmFtTm9kZS0+
ZGVzdHJveURhdGEoKTsKKyAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmNvcHlEYXRhRnJvbUFsdGVy
bmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCku
Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGUo
ZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAg
ICAgaWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOwor
ICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQpCisgICAgICAgICAgICBkZmdD
b21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCks
IG1faml0Q29kZUZvckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGlsZWQpIHsKKyAgICAgICAg
ICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxz
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2st
PnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxv
Y2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21w
aWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkp
OworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICgh
Qnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9w
cm9ncmFtQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBtX3By
b2dyYW1Db2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0zNDIsNyArMzQxLDI5IEBAIHZvaWQg
UHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCiAgICAgQmFzZTo6Y2xlYXJDb2RlKCk7CiB9
CiAKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0
ZSogY2FsbGVlQXJnc0V4ZWMpCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
T3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykKK3sKKyAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCghIW1fY29kZUJs
b2NrRm9yQ2FsbCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gMDsKKyAgICBpZiAobV9jb2RlQmxv
Y2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAg
ICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGNh
bGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNhbGwtPmdl
dEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgcmV0
dXJuIGVycm9yOworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0
aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW5Ob2RlKQoreworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7CisgICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIEpT
T2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRK
SVRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAgICBlcnJvciA9IGNvbXBp
bGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6bmV4
dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVFR5cGUoKSkpOworICAgIEFT
U0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisK
K0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSog
Y2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBKU09iamVj
dCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNo
YWluTm9kZS0+Z2xvYmFsRGF0YTsKQEAgLTM1OCwxMSArMzc5LDEyIEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJU
KCFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IGFkb3B0UHRy
KG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwg
c291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgZmFsc2UpKTsKLSAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ2Fs
bC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkpOworICAgIE93blB0
cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9jb2RlQmxvY2tGb3JDYWxsLnJlbGVh
c2UoKTsKKyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9
PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IGFkb3B0UHRy
KG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVjdCwg
c291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgZmFsc2UsIHByZXZp
b3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4g
Z2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29w
ZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9j
a0ZvckNhbGwuZ2V0KCksICEhbV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpID8gQnl0
ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9y
OjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5n
ZW5lcmF0ZSgpKSkgewotICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2tGb3JDYWxsID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVC
bG9jaz4obV9jb2RlQmxvY2tGb3JDYWxsLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAg
IGJvZHktPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQpA
QCAtMzczLDE3ICszOTUsMzEgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvcgogICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPnNoYXJlZFN5bWJv
bFRhYmxlKCk7CiAKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOworICAgIG1fY29kZUJsb2NrRm9y
Q2FsbC0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
aWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBib29sIGRmZ0Nv
bXBpbGVkID0gdHJ5REZHQ29tcGlsZUZ1bmN0aW9uKGV4ZWMsIGNhbGxlZUFyZ3NFeGVjLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwuZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisgICAgICAgIGJvb2wg
ZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6REZH
SklUKQorICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBpbGVGdW5jdGlvbihl
eGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBtX2ppdENvZGVG
b3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworICAgICAgICBpZiAoZGZn
Q29tcGlsZWQpIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0
aXZlKCkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgp
LT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAg
bV9jb2RlQmxvY2tGb3JDYWxsID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9j
az4obV9jb2RlQmxvY2tGb3JDYWxsLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAg
ICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAg
ICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPnNoYXJlZFN5
bWJvbFRhYmxlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2Rl
LT5nbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksICZtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2spOwotCisgICAgICAgIH0KICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElO
RykKICAgICAgICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkp
CiAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmRpc2NhcmRCeXRlY29kZSgpOwogI2Vu
ZGlmCisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPnNldEpJVENvZGUobV9q
aXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKICAgICB9CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShjYWxsZWVBcmdzRXhlYyk7CkBAIC00MDMsOCArNDM5LDEw
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICByZXR1cm4g
MDsKIH0KIAotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVj
dEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQorSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBKSVRD
b2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKGppdFR5cGUpOworICAg
IAogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwogICAgIFJlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2Rl
PihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIDAsIG1fc291cmNlLCBtX3BhcmFtZXRl
cnMuZ2V0KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWws
ICZleGNlcHRpb24pOwpAQCAtNDE5LDExICs0NTcsMTIgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y29tcGlsZUZvcgogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAKLSAgICBBU1NFUlQoIW1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IGFkb3B0
UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIGdsb2JhbE9iamVj
dCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgdHJ1ZSkpOwot
ICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRl
Y29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpKSkp
OworICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QucmVsZWFzZSgpOworICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpi
b3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rp
b25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0
T2Zmc2V0KCksIHRydWUsIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgIE93blB0
cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVy
YXRvcihib2R5LmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAhIW1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGlt
aXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2RlR2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkp
OwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAg
ICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOworICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIGJvZHkt
PmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAgICAgfQpAQCAtNDM0
LDE0ICs0NzMsMzAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgog
ICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2hhcmVkU3ltYm9s
VGFibGUoKTsKIAogICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQog
ICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgbV9qaXRD
b2RlRm9yQ29uc3RydWN0ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRh
LCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrKTsKKyAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOworICAgICAg
ICAvLyBGSVhNRTogTWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIGNvbnN0cnVjdG9ycyB3aXRo
IERGRy4KKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAg
ICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5
bWJvbFRhYmxlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFp
bk5vZGUtPmdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCAmbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICB9CiAjaWYgIUVOQUJMRShP
UENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2Vu
ZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRpc2Nh
cmRCeXRlY29kZSgpOwogI2VuZGlmCisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwNiwxMCArMzA2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJU
KGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpT
T2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fZXZhbENvZGVCbG9jaykKLSAg
ICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9k
ZSk7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVD
aGFpbk5vZGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQo
IWVycm9yID09ICEhbV9ldmFsQ29kZUJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKIAogICAgICAgICBFdmFsQ29kZUJsb2NrJiBn
ZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsKQEAgLTM0NCw3ICszNDYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdz
OwogICAgICAgICBFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwg
Ym9vbCk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdW5saW5r
Q2FsbHMoKTsKIApAQCAtMzY5LDExICszNzEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKICAgICAgICAgICAgIGlmICghbV9wcm9ncmFt
Q29kZUJsb2NrKQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMs
IHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5h
bChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX3Byb2dyYW1Db2RlQmxvY2spOwogICAgICAgICAg
ICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CiAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVP
cHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKwogICAgICAgICBQcm9ncmFt
Q29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVChtX3Byb2dyYW1Db2RlQmxvY2spOwpAQCAtNDAzLDcgKzQwNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAg
ICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsK
IAotICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKik7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwg
U2NvcGVDaGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCB1bmxpbmtDYWxscygp
OwogCkBAIC00NTAsMTEgKzQ1NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFT
U0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNh
bGwpCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMs
IHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYyk7CisgICAgICAgICAgICAgICAgZXJyb3Ig
PSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdz
RXhlYywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZXJy
b3IgPT0gISFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwog
ICAgICAgICB9CiAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyA9IDAp
OworCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKQEAgLTQ3MSwxMSArNDc3LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7
CiAgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQotICAgICAgICAgICAg
ICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5h
bChleGVjLCBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAg
ICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAorICAgICAgICBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwor
CiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CkBAIC01MDEsNiAr
NTA5LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVGb3JD
b25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgICAgICB9CiAgICAgICAgIAorICAg
ICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvcihFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBjb21waWxlT3B0aW1pemVkRm9yIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCB3aXRoIGEgY2FsbGZyYW1lIHNldCB1cCB0byBjYWxsIHRoaXMgZnVuY3Rpb24s
CisgICAgICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIG1ha2Ugc3BlY3VsYXRpdmUgb3B0aW1pemF0
aW9ucyBiYXNlZCBvbiB0aGUgYXJndW1lbnRzLgorICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNh
bGxlZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKS0+aW5oZXJpdHMoJkpT
RnVuY3Rpb246OnNfaW5mbykpOworICAgICAgICAgICAgQVNTRVJUKGFzRnVuY3Rpb24oZXhlYy0+
Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKSA9PSB0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXBpbGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBleGVjKTsKKyAgICAg
ICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgcmV0
dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpCkBAIC01NDksOCArNTcxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFy
YW1ldGVycyosIGJvb2wpOwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgZm9yY2VVc2Vz
QXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBib29sKTsKIAotICAgICAgICBKU09iamVj
dCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4
ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMpOwotICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNv
bnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2Rl
KiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSk7CisgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVD
aGFpbk5vZGUqLCBKSVRDb2RlOjpKSVRUeXBlKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBT
Y3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgdW5zaWduZWQgbV9udW1D
YXB0dXJlZFZhcmlhYmxlcyA6IDMxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZv
cm0uaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRm
b3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2MCw5ICs5NjAsMTcgQEAKICNkZWZpbmUgRU5BQkxF
X0RGR19KSVQgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfVElFUkVEX0NPTVBJTEFU
SU9OKQorI2RlZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAKKyNlbmRpZgorCiAvKiBD
dXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQ
TEFURk9STShNQUMpICovCi0jaWYgIWRlZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVSKSAmJiBF
TkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9STShNQUMpCi0jZGVmaW5lIEVO
QUJMRV9WQUxVRV9QUk9GSUxFUiAwCisjaWYgIWRlZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJTEVS
KQorI2RlZmluZSBFTkFCTEVfVkFMVUVfUFJPRklMRVIgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElP
TgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfRFlOQU1JQ19PUFRJTUlaQVRJT04pCisj
ZGVmaW5lIEVOQUJMRV9EWU5BTUlDX09QVElNSVpBVElPTiBFTkFCTEVfVElFUkVEX0NPTVBJTEFU
SU9OCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9WRVJCT1NFX1ZBTFVFX1BST0ZJTEUp
ICYmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvU2VudGluZWxMaW5rZWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9TZW50aW5lbExpbmtlZExpc3QuaAkocmV2aXNpb24gOTQ1MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSwyNCArNDEsNjMgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGVudW0gU2VudGluZWxUYWcgeyBT
ZW50aW5lbCB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gY2xhc3MgU2VudGluZWxMaW5r
ZWRMaXN0IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBOb2RlKiBpdGVyYXRvcjsKKyAgICBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZShTZW50aW5lbFRhZykKKyAgICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBt
X3ByZXYoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJhc2ljUmF3U2VudGluZWxOb2RlKCkK
KyAgICAgICAgOiBtX25leHQoMCkKKyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0UHJldihCYXNpY1Jhd1NlbnRpbmVsTm9kZSogcHJldikgeyBtX3By
ZXYgPSBwcmV2OyB9CisgICAgdm9pZCBzZXROZXh0KEJhc2ljUmF3U2VudGluZWxOb2RlKiBuZXh0
KSB7IG1fbmV4dCA9IG5leHQ7IH0KKyAgICAKKyAgICBUKiBwcmV2KCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8VCo+KG1fcHJldik7IH0KKyAgICBUKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VCo+KG1fbmV4dCk7IH0KKyAgICAKKyAgICBib29sIGlzT25MaXN0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghIW1fcHJldiA9PSAhIW1fbmV4dCk7CisgICAgICAgIHJldHVybiAhIW1f
cHJldjsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmUoKTsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgQmFzaWNSYXdTZW50aW5lbE5vZGUqIG1fbmV4dDsKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZSogbV9wcmV2OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05vZGUg
PSBUPiBjbGFzcyBTZW50aW5lbExpbmtlZExpc3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVCog
aXRlcmF0b3I7CiAKICAgICBTZW50aW5lbExpbmtlZExpc3QoKTsKIAotICAgIHZvaWQgcHVzaChO
b2RlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlKE5vZGUqKTsKKyAgICB2b2lkIHB1c2goVCop
OworICAgIHN0YXRpYyB2b2lkIHJlbW92ZShUKik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpOwog
ICAgIGl0ZXJhdG9yIGVuZCgpOwogCiBwcml2YXRlOgotICAgIE5vZGUgbV9oZWFkU2VudGluZWw7
Ci0gICAgTm9kZSBtX3RhaWxTZW50aW5lbDsKKyAgICBSYXdOb2RlIG1faGVhZFNlbnRpbmVsOwor
ICAgIFJhd05vZGUgbV90YWlsU2VudGluZWw7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9k
ZT4gaW5saW5lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6U2VudGluZWxMaW5rZWRMaXN0KCkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIEJhc2ljUmF3U2VudGluZWxOb2RlPFQ+OjpyZW1v
dmUoKQoreworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxULCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxU
PiA+OjpyZW1vdmUoc3RhdGljX2Nhc3Q8VCo+KHRoaXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3
Tm9kZT46OlNlbnRpbmVsTGlua2VkTGlzdCgpCiAgICAgOiBtX2hlYWRTZW50aW5lbChTZW50aW5l
bCkKICAgICAsIG1fdGFpbFNlbnRpbmVsKFNlbnRpbmVsKQogewpAQCAtNjksMjEgKzEwOCwyNCBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIFNlbnRpbmVsCiAgICAgbV90YWlsU2Vu
dGluZWwuc2V0TmV4dCgwKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB0
eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2Vk
TGlzdDxOb2RlPjo6YmVnaW4oKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05v
ZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJh
dG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6YmVnaW4oKQogewotICAgIHJldHVy
biBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX2hl
YWRTZW50aW5lbC5uZXh0KCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5l
IHR5cGVuYW1lIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6aXRlcmF0b3IgU2VudGluZWxMaW5r
ZWRMaXN0PE5vZGU+OjplbmQoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJhd05v
ZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46Oml0ZXJh
dG9yIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdOb2RlPjo6ZW5kKCkKIHsKLSAgICByZXR1cm4g
Jm1fdGFpbFNlbnRpbmVsOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4oJm1fdGFpbFNlbnRp
bmVsKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVs
TGlua2VkTGlzdDxOb2RlPjo6cHVzaChOb2RlKiBub2RlKQordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFJhd05vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxULCBSYXdO
b2RlPjo6cHVzaChUKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsKLSAgICBOb2RlKiBwcmV2
ID0gJm1faGVhZFNlbnRpbmVsOwotICAgIE5vZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0
KCk7CisgICAgQVNTRVJUKCFub2RlLT5wcmV2KCkpOworICAgIEFTU0VSVCghbm9kZS0+bmV4dCgp
KTsKKyAgICAKKyAgICBSYXdOb2RlKiBwcmV2ID0gJm1faGVhZFNlbnRpbmVsOworICAgIFJhd05v
ZGUqIG5leHQgPSBtX2hlYWRTZW50aW5lbC5uZXh0KCk7CiAKICAgICBub2RlLT5zZXRQcmV2KHBy
ZXYpOwogICAgIG5vZGUtPnNldE5leHQobmV4dCk7CkBAIC05MiwxNyArMTM0LDI1IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgdm9pZCBTZW4KICAgICBuZXh0LT5zZXRQcmV2KG5v
ZGUpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5saW5lIHZvaWQgU2VudGluZWxM
aW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUoTm9kZSogbm9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUgdm9pZCBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3
Tm9kZT46OnJlbW92ZShUKiBub2RlKQogewotICAgIE5vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7
Ci0gICAgTm9kZSogbmV4dCA9IG5vZGUtPm5leHQoKTsKKyAgICBBU1NFUlQobm9kZSk7CisgICAg
QVNTRVJUKCEhbm9kZS0+cHJldigpKTsKKyAgICBBU1NFUlQoISFub2RlLT5uZXh0KCkpOworICAg
IAorICAgIFJhd05vZGUqIHByZXYgPSBub2RlLT5wcmV2KCk7CisgICAgUmF3Tm9kZSogbmV4dCA9
IG5vZGUtPm5leHQoKTsKIAogICAgIHByZXYtPnNldE5leHQobmV4dCk7CiAgICAgbmV4dC0+c2V0
UHJldihwcmV2KTsKKyAgICAKKyAgICBub2RlLT5zZXRQcmV2KDApOworICAgIG5vZGUtPnNldE5l
eHQoMCk7CiB9CiAKIH0KIAordXNpbmcgV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTsKIHVzaW5n
IFdURjo6U2VudGluZWxMaW5rZWRMaXN0OwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106393</attachid>
            <date>2011-09-05 23:45:00 -0700</date>
            <delta_ts>2011-09-06 02:23:04 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>dynopt_patch_15.diff</filename>
            <type>text/plain</type>
            <size>133792</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgyIEBA
CisyMDExLTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSB0aWVyZWQgY29tcGlsYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCisgICAgICAgIAorICAgICAgICBUaGlzIGFk
ZHMgdGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBDb2RlQmxvY2tzIGFzc29jaWF0ZWQgd2l0
aAorICAgICAgICBhIHBhcnRpY3VsYXIgcm9sZSBpbiBhbiBFeGVjdXRhYmxlLiAgVGhlc2UgYXJl
IHN0b3JlZCBpbgorICAgICAgICBkZXNjZW5kaW5nIG9yZGVyIG9mIGNvbXBpbGVyIHRpZXIuICBD
b2RlQmxvY2tzIGFyZSBvcHRpbWl6ZWQgd2hlbgorICAgICAgICBhIGNvdW50ZXIgKG1fZXhlY3V0
ZUNvdW50ZXIpIHRoYXQgaXMgaW5jcmVtZW50ZWQgaW4gbG9vcHMgYW5kCisgICAgICAgIGVwaWxv
Z3VlcyBiZWNvbWVzIHBvc2l0aXZlLiAgT3B0aW1pemluZyBtZWFucyB0aGF0IGFsbCBjYWxscyB0
bworICAgICAgICB0aGUgb2xkIENvZGVCbG9jayBhcmUgdW5saW5rZWQuCisgICAgICAgIAorICAg
ICAgICBUaGUgREZHIGNhbiBub3cgcHVsbCBpbiBwcmVkaWN0aW9ucyBmcm9tIFZhbHVlUHJvZmls
ZXMsIGFuZAorICAgICAgICBwcm9wYWdhdGUgdGhlbSBhbG9uZyB0aGUgZ3JhcGguICBUbyBzdXBw
b3J0IHRoZSBuZXcgcGhhc2Ugd2hpbGUKKyAgICAgICAgbWFpbnRhaW5nIHNvbWUgbGV2ZWwgb2Yg
YWJzdHJhY3Rpb24sIGEgREZHRHJpdmVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRoYXQgZW5j
YXBzdWxhdGVzIGhvdyB0byBydW4gdGhlIERGRyBjb21waWxlci4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQncyBub3QgeWV0IGEgcGVy
Zm9ybWFuY2UKKyAgICAgICAgd2luIG9uIGFsbCBiZW5jaG1hcmtzLiAgSXQgc3BlZWRzIHVwIGNy
eXB0byBhbmQgcmljaGFyZHMgYnkKKyAgICAgICAgMTAlIGFuZCA2JSByZXNwZWN0aXZlbHksIGJ1
dCBzdGlsbCBkb2VzIG5vdCBkbyBhcyBnb29kIG9mIGEgam9iCisgICAgICAgIGFzIGl0IGNvdWxk
LiAgTm90YWJseSwgdGhlIERGRyBiYWNrZW5kIGhhcyBub3QgY2hhbmdlZCwgYW5kCisgICAgICAg
IGlzIGxhcmdlbHkgb2JsaXZpb3VzIHRvIHRoZSBuZXcgaW5mb3JtYXRpb24gYmVpbmcgbWFkZSBh
dmFpbGFibGUKKyAgICAgICAgdG8gaXQuCisgICAgICAgIAorICAgICAgICBXaGVuIHR1cm5lZCBv
ZmYgKHRoZSBkZWZhdWx0KSwgdGhpcyBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3By
b3BzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5
LWZpbGVzLmNtZDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6YnJhbmNoQWRkMzIpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6YnJhbmNoQWRkMzIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2aXNpdEFnZ3Jl
Z2F0ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp1bmxpbmtDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJFdmFsQ2Fj
aGUpOgorICAgICAgICAoSlNDOjpyZXBsYWNlRXhpc3RpbmdFbnRyaWVzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9j
azo6cmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVk
KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6R2xvYmFsQ29kZUJsb2NrOjpH
bG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpQcm9ncmFt
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZhbENvZGVCbG9jayk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNvZGVCbG9jayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJv
ZmlsZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3Rp
Y3MpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0
ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZHluYW1pY2FsbHlQcmVkaWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlD
b21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0pTQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0ludDMyQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0RvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVl
T2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmlzQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0pTQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjppc0ludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjppc0RvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgICogZGZnL0RGR05vZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGxQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjppc051bWJlclByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25U
b1N0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFs
dWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzSW50MzJDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNEb3VibGVDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkludDMyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnZhbHVlT2ZEb3VibGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0
b3I6OnNldFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Om1lcmdl
UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlRm9yd2FyZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQmFja3dhcmQpOgorICAgICAg
ICAoSlNDOjpERkc6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0aW9uLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRmZ0xpbmtGb3IpOgorICAgICAgICAq
IGhlYXAvSGFuZGxlSGVhcC5oOgorICAgICAgICAoSlNDOjpIYW5kbGVIZWFwOjpOb2RlOjpOb2Rl
KToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1p
emF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRUaW1lb3V0Q2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRf
b2JqZWN0X29yX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgIChKU0M6
OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpib3R0b21UaWVySklU
KToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6dG9wVGllckpJVCk6CisgICAgICAgIChKU0M6OkpJ
VENvZGU6Om5leHRUaWVySklUKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAg
ICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmg6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJs
ZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0
aW1pemVkRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZU9wdGltaXplZEZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3IpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOgorICAgICAgICAqIHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaDoKKyAgICAgICAgKFdURjo6
QmFzaWNSYXdTZW50aW5lbE5vZGU6OkJhc2ljUmF3U2VudGluZWxOb2RlKToKKyAgICAgICAgKFdU
Rjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6OnNldFByZXYpOgorICAgICAgICAoV1RGOjpCYXNpY1Jh
d1NlbnRpbmVsTm9kZTo6c2V0TmV4dCk6CisgICAgICAgIChXVEY6OkJhc2ljUmF3U2VudGluZWxO
b2RlOjpwcmV2KToKKyAgICAgICAgKFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU6Om5leHQpOgor
ICAgICAgICAoV1RGOjpCYXNpY1Jhd1NlbnRpbmVsTm9kZTo6aXNPbkxpc3QpOgorICAgICAgICAo
V1RGOjo6OnJlbW92ZSk6CisgICAgICAgIChXVEY6Ojo6U2VudGluZWxMaW5rZWRMaXN0KToKKyAg
ICAgICAgKFdURjo6OjpiZWdpbik6CisgICAgICAgIChXVEY6Ojo6ZW5kKToKKyAgICAgICAgKFdU
Rjo6OjpwdXNoKToKKwogMjAxMS0wOS0wNSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk0NDQ1IGFu
ZCByOTQ0NDguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biA5NDU1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2Fzc2VtYmxlciIKICAgICAiJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2J5dGVjb2RlIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnl0
ZWNvbXBpbGVyIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vZGZnIgogICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vaGVhcCIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2RlYnVnZ2Vy
IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW50ZXJwcmV0ZXIiCkBAIC01NCw3ICs1NSw3
IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3Bw
CiAgICAgZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVn
Z2VyQ2FsbEZyYW1lLmNwcAotCisgICAgCiAgICAgaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAog
ICAgIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcAogICAgIGludGVycHJldGVyL1JlZ2lzdGVy
RmlsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDk0NTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzICs9IFwKIAkt
SSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyIFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwIFwK
IAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIgXAogCS1JJChzcmNk
aXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTQ1NTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5
KQpAQCAtMTAyLDYgKzEwMiw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGUFJJbmZvLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHUFJJbmZvLmggXApAQCAtMTE2LDYgKzExOCw4IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRp
dmVKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZ2lzdGVyQmFuay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaCBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvagkocmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1MCw2ICsxNTUwLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQk8L0Zp
bHRlcj4KKyAgICAgICAgICAgICAgICA8RmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBO
YW1lPSJkZmciCisgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGRmZ1xERkdEcml2ZXIuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgIDwvRmls
dGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJyIgogCQkJPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZUNvbW1vbi52c3Byb3BzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24u
dnNwcm9wcwkocmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlQ29tbW9uLnZzcHJv
cHMJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiAJPgogCTxUb29sCiAJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90OyQo
Q29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNjcmlwdENvcmVcRGVyaXZlZFNvdXJjZXNc
JnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4uL3BhcnNlci87Li4vLi4vYnl0ZWNvbXBpbGVy
LzsuLi8uLi9qaXQvOy4uLy4uL3J1bnRpbWUvOy4uLy4uL2J5dGVjb2RlLzsuLi8uLi9pbnRlcnBy
ZXRlci87Li4vLi4vd3RmLzsuLi8uLi9wcm9maWxlcjsuLi8uLi9hc3NlbWJsZXIvOy4uLy4uL2Rl
YnVnZ2VyLzsuLi8uLi9oZWFwLzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZx
dW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29u
ZmlndXJhdGlvbkJ1aWxkRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChXZWJLaXRM
aWJyYXJpZXNEaXIpXGluY2x1ZGVccHRocmVhZHMmcXVvdDsiCisJCUFkZGl0aW9uYWxJbmNsdWRl
RGlyZWN0b3JpZXM9IiZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpcSmF2YVNjcmlw
dENvcmVcRGVyaXZlZFNvdXJjZXNcJnF1b3Q7Oy4uLy4uLzsuLi8uLi9BUEkvOy4uLy4uL3BhcnNl
ci87Li4vLi4vYnl0ZWNvbXBpbGVyLzsuLi8uLi9kZmcvOy4uLy4uL2ppdC87Li4vLi4vcnVudGlt
ZS87Li4vLi4vYnl0ZWNvZGUvOy4uLy4uL2ludGVycHJldGVyLzsuLi8uLi93dGYvOy4uLy4uL3By
b2ZpbGVyOy4uLy4uL2Fzc2VtYmxlci87Li4vLi4vZGVidWdnZXIvOy4uLy4uL2hlYXAvOyZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFy
aWVzRGlyKVxpbmNsdWRlXHByaXZhdGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGRE
aXIpXGluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVc
SmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1
ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxwdGhy
ZWFkcyZxdW90OyIKIAkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9fU1REX0MiCiAJCUZvcmNl
ZEluY2x1ZGVGaWxlcz0iSUNVVmVyc2lvbi5oIgogCS8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21k
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQJKHJldmlzaW9uIDk0NTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9j
b3B5LWZpbGVzLmNtZAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBta2RpciAiJVBy
aXZhdGVIZWFkZXJzRGlyZWN0b3J5JSIgMj5OVUwKIGZvciAlJWQgaW4gKAogICAgIGFzc2VtYmxl
cgogICAgIGJ5dGVjb2RlCisgICAgZGZnCiAgICAgaGVhcAogICAgIGRlYnVnZ2VyCiAgICAgaW50
ZXJwcmV0ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDU1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMCBAQAogCQkwRkM4MTUw
QjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2
MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTExOUIw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0
cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTEyMTQwNTExODYwMENG
QTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07CisJCTBGRDNDODI1MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdQcm9wYWdhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDNDODIzMTQxMTVEMUEwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9y
LmNwcCAqLzsgfTsKKwkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKKwkJMEZEM0M4MjcxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi87IH07CisJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQx
MTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5
MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4
RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdy
YXBwZXIuY3BwICovOyB9OwpAQCAtMzc1LDcgKzM3OSw3IEBACiAJCTk2OUEwNzJBMEVEMUNFNjkw
MEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTY5QTA3MjcwRUQxQ0U2OTAwRjFGNjgxIC8qIExhYmVsLmggKi87IH07CiAJCTk2
OUEwNzJCMEVEMUNFNjkwMEYxRjY4MSAvKiBSZWdpc3RlcklELmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDcyODBFRDFDRTY5MDBGMUY2ODEgLyog
UmVnaXN0ZXJJRC5oICovOyB9OwogCQk5NjlBMDcyQzBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVu
dGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NjlBMDcyOTBFRDFDRTY5MDBGMUY2ODEgLyogU2VnbWVudGVkVmVjdG9yLmggKi87IH07Ci0J
CTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgx
IC8qIENvZGVCbG9jay5jcHAgKi87IH07CisJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBD
b2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi87IHNldHRpbmdz
ID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJOTY5
QTA3OTcwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY5QTA3OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENv
ZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTk2OUEw
Nzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyog
RXZhbENvZGVDYWNoZS5oICovOyB9OwogCQk5NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5z
dHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk2OUEwNzkzMEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovOyB9OwpAQCAtNzc5
LDYgKzc4MywxMCBAQAogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJT
dXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBh
dGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZE
M0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERGR1By
b3BhZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJv
cGFnYXRvci5jcHA7IHBhdGggPSBkZmcvREZHUHJvcGFnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0
aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8q
IEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNl
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE3OSw2ICsyMTg3LDEw
IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAv
KiBERkdQcm9wYWdhdG9yLmggKi8sCisJCQkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0b3IuY3BwICovLAorCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCAqLywKKwkJCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLywKIAkJCQk4NkVDQTRGMDEzMkVBQTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmgg
Ki8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCAqLywKQEAgLTI2MTcsNiArMjYyOSw4IEBACiAJCQkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBE
IC8qIGZpeGVkLWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkM1MzE0MTNGQUY2RUYwMEI3
REMwRCAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkM1MzE1MTNGQUY2RUYwMEI3
REMwRCAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4
MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFD
N0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAy
QzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
QEAgLTMwMzMsNiArMzA0Nyw4IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQzQzgy
NTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNp
b24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogCiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uOjphbmQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bjo6YnJhbmNoQWRkMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN1YjMy
OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpsb2FkMzI7CkBAIC0xMDgsNiArMTA5LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIGFkZHJlc3MpOwogICAgIH0KIAor
ICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBz
cmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRk
bF9pbShzcmMubV92YWx1ZSwgZGVzdC5tX3B0cik7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5j
aDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lz
dGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JtKHJpZ2h0LCBs
ZWZ0Lm1fcHRyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uOjphZGQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
YW5kMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwog
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6bG9hZDMyOwpAQCAtMzIyLDYgKzMyMywxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNz
ZW1ibGVyLnNldENDX3IoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0KTsKICAgICAgICAgbV9hc3Nl
bWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5j
aEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFk
ZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRy
KSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgYWRkMzIoc3JjLCBBZGRyZXNzKHNjcmF0Y2hS
ZWdpc3RlcikpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0
aW9uKGNvbmQpKSk7CisgICAgfQogCiAgICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDk0NTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDEsOSArMTQwMSwxMCBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFs
T2JqZWN0ICpnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1UYWIsIGJvb2wg
aXNDb25zdHJ1Y3RvcikKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0ICpnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25l
ZCBzb3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1UYWIsIGJvb2wgaXNDb25zdHJ1Y3Rvciwg
UGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQogICAgIDogbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0
KQogICAgICwgbV9oZWFwKCZtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApCisgICAg
LCBtX2V4ZWN1dGVDb3VudGVyKC0xMDAwKSAvLyB0cmlnZ2VyIG9wdGltaXphdGlvbiB3aGVuIHNp
Z24gYml0IGNsZWFycwogICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkKICAgICAsIG1fbnVt
VmFycygwKQogICAgICwgbV9udW1QYXJhbWV0ZXJzKDApCkBAIC0xNDIyLDYgKzE0MjMsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZShz
b3VyY2VQcm92aWRlcikKICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAs
IG1fc3ltYm9sVGFibGUoc3ltVGFiKQorICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkK
IHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwogCkBAIC0xNDQxLDE1ICsxNDQzLDE4IEBAIENvZGVC
bG9jazo6fkNvZGVCbG9jaygpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIGFyZyA9
ICV1OiAiLCBpICsgMSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIgICBiYyA9ICVkOiAiLCBwcm9maWxlLT5ieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJzYW1wbGVzID0gJXUsIGludDMyID0gJXUs
IGRvdWJsZSA9ICV1LCBjZWxsID0gJXUsIGFycmF5ID0gJXVcbiIsCi0gICAgICAgICAgICAgICAg
cHJvZmlsZS0+bnVtYmVyT2ZTYW1wbGVzKCksCi0gICAgICAgICAgICAgICAgcHJvZmlsZS0+cHJv
YmFiaWxpdHlPZkludDMyKCksCi0gICAgICAgICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlP
ZkRvdWJsZSgpLAotICAgICAgICAgICAgICAgIHByb2ZpbGUtPnByb2JhYmlsaXR5T2ZDZWxsKCks
Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS0+cHJvYmFiaWxpdHlPZkFycmF5KCkpOworICAgICAg
ICBwcm9maWxlLT5kdW1wKHN0ZGVycik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsK
ICAgICB9CiAjZW5kaWYKKyAgICAKKyAgICAvLyBXZSBzaG91bGQgbm90IGJlIGdhcmJhZ2UgY29s
bGVjdGVkIGlmIHRoZXJlIGFyZSBpbmNvbWluZyBjYWxscy4gQnV0CisgICAgLy8gaWYgdGhpcyBp
cyBjYWxsZWQgZHVyaW5nIGhlYXAgZGVzdHJ1Y3Rpb24sIHRoZW4gdGhlcmUgbWF5IHN0aWxsIGJl
CisgICAgLy8gaW5jb21pbmcgY2FsbHMsIHdoaWNoIGlzIGhhcm1sZXNzLgorICAgIAorICAgIC8v
IE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1vdmVkIGZyb20gb3RoZXIg
Q29kZUJsb2NrcycKKyAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2VkIGxpc3RzIHRocm91Z2gg
dGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbworICAgIC8vIGRlc3RydWN0b3JzLgog
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBmb3IgKHNpemVfdCBzaXplID0gbV9zdHJ1Y3R1cmVTdHVi
SW5mb3Muc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkKQEAgLTE1MTksNiArMTUyNCw4IEBA
IHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKIHsKICAgICBib29sIGhh
bmRsZVdlYWtSZWZlcmVuY2VzID0gZmFsc2U7CiAgICAgCisgICAgaWYgKCEhbV9hbHRlcm5hdGl2
ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAg
dmlzaXRvci5hcHBlbmQoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmbV9v
d25lckV4ZWN1dGFibGUpOwogICAgIGlmIChtX3JhcmVEYXRhKSB7CkBAIC0xNzg5LDggKzE3OTYs
MzAgQEAgdm9pZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYQogfQogICAgIAog
I2lmIEVOQUJMRShKSVQpCit2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQo
aXNMaW5rZWQoKSk7CisgICAgCisgICAgaWYgKGlzREZHKSB7CisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbkNhbGwoY2FsbFJldHVy
bkxvY2F0aW9uKSwgaXNDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0KTsKKyNlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisg
ICAgfSBlbHNlCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJD
YWxsKGNhbGxSZXR1cm5Mb2NhdGlvbiksIGlzQ2FsbD8gZ2xvYmFsRGF0YS5qaXRTdHVicy0+Y3Rp
VmlydHVhbENhbGxMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3Ry
dWN0TGluaygpKTsKKyAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOworICAgIGNhbGxl
ZS5jbGVhcigpOworCisgICAgLy8gSXQgd2lsbCBiZSBvbiBhIGxpc3QgaWYgdGhlIGNhbGxlZSBo
YXMgYSBjb2RlIGJsb2NrLgorICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsK
K30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKIHsKKyAgICBpZiAoISFtX2FsdGVy
bmF0aXZlKQorICAgICAgICBtX2FsdGVybmF0aXZlLT51bmxpbmtDYWxscygpOwogICAgIGlmICgh
KG1fY2FsbExpbmtJbmZvcy5zaXplKCkgfHwgbV9tZXRob2RDYWxsTGlua0luZm9zLnNpemUoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCkBA
IC0xNzk5LDI0ICsxODI4LDEwMSBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rQ2FsbHMoKQogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9zLnNpemUoKTsgaSsrKSB7CiAg
ICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGdldEpJVENvZGUoKS5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
REZHSklUKSB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhDb2RlTG9jYXRpb25DYWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0dXJuTG9j
YXRpb24pLCBtX2NhbGxMaW5rSW5mb3NbaV0uaXNDYWxsID8gb3BlcmF0aW9uTGlua0NhbGwgOiBv
cGVyYXRpb25MaW5rQ29uc3RydWN0KTsKLSNlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKG1fY2FsbExpbmtJbmZvc1tpXS5jYWxsUmV0
dXJuTG9jYXRpb24pLCBtX2NhbGxMaW5rSW5mb3NbaV0uaXNDYWxsID8gbV9nbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkgOiBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlWaXJ0dWFsQ29uc3RydWN0TGluaygpKTsKLSAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVu
bGluaygpOworICAgICAgICBtX2NhbGxMaW5rSW5mb3NbaV0udW5saW5rKCptX2dsb2JhbERhdGEs
IHJlcGF0Y2hCdWZmZXIpOwogICAgIH0KIH0KKwordm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29t
aW5nQ2FsbHMoKQoreworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKKyAg
ICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgp
KQorICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKCptX2dsb2JhbERhdGEs
IHJlcGF0Y2hCdWZmZXIpOworfQogI2VuZGlmCiAKIHZvaWQgQ29kZUJsb2NrOjpjbGVhckV2YWxD
YWNoZSgpCiB7CisgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgbV9hbHRlcm5hdGl2
ZS0+Y2xlYXJFdmFsQ2FjaGUoKTsKICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUuY2xlYXIoKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIHJlcGxhY2VFeGlzdGluZ0VudHJpZXMoVmVjdG9y
PFQ+JiB0YXJnZXQsIFZlY3RvcjxUPiYgc291cmNlKQoreworICAgIEFTU0VSVCh0YXJnZXQuc2l6
ZSgpIDw9IHNvdXJjZS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0
LnNpemUoKTsgKytpKQorICAgICAgICB0YXJnZXRbaV0gPSBzb3VyY2VbaV07Cit9CisKK3ZvaWQg
Q29kZUJsb2NrOjpjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpCit7CisgICAgaWYgKCFtX2FsdGVy
bmF0aXZlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVwbGFjZUV4aXN0aW5nRW50cmll
cyhtX2NvbnN0YW50UmVnaXN0ZXJzLCBtX2FsdGVybmF0aXZlLT5tX2NvbnN0YW50UmVnaXN0ZXJz
KTsKKyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVuY3Rpb25EZWNscywgbV9hbHRlcm5h
dGl2ZS0+bV9mdW5jdGlvbkRlY2xzKTsKKyAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fZnVu
Y3Rpb25FeHBycywgbV9hbHRlcm5hdGl2ZS0+bV9mdW5jdGlvbkV4cHJzKTsKK30KKworLy8gRklY
TUU6IEltcGxlbWVudCBPU1IuIElmIGNvbXBpbGVPcHRpbWl6ZWQoKSBpcyBjYWxsZWQgZnJvbSBz
b21ld2hlcmUgb3RoZXIgdGhhbiB0aGUKKy8vIGVwaWxvZ3VlLCBkbyBPU1IgZnJvbSB0aGUgb2xk
IGNvZGUgYmxvY2sgdG8gdGhlIG5ldyBvbmUuCisKKy8vIEZJWE1FOiBBZnRlciBkb2luZyBzdWNj
ZXNzZnVsIG9wdGltaXplZCBjb21waWxhdGlvbiwgcmVzZXQgdGhlIHByb2ZpbGluZyBjb3VudGVy
IHRvIC0xLCBzbworLy8gdGhhdCB0aGUgbmV4dCBleGVjdXRpb24gb2YgdGhlIG9sZCBjb2RlIGJs
b2NrIHdpbGwganVtcCBzdHJhaWdodCBpbnRvIGNvbXBpbGVPcHRpbWl6ZWQoKQorLy8gYW5kIHBl
cmZvcm0gT1NSLgorCisvLyBGSVhNRTogRW5zdXJlIHRoYXQgYSBjYWxsIHRvIGNvbXBpbGVPcHRp
bWl6ZWQoKSBqdXN0IGRvZXMgT1NSIChhbmQgcmVzZXRzIHRoZSBjb3VudGVyIHRvIC0xKQorLy8g
aWYgdGhlIGNvZGUgaGFkIGFscmVhZHkgYmVlbiBjb21waWxlZC4KKworQ29kZUJsb2NrKiBQcm9n
cmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxQ
cm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Z2VuZXJhdGVkQnl0ZWNvZGUo
KTsKK30KKworQ29kZUJsb2NrKiBFdmFsQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAg
cmV0dXJuICZzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+
Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKK30KKworQ29kZUJsb2NrKiBGdW5jdGlvbkNvZGVCbG9jazo6
cmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihtX2lzQ29uc3Ry
dWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQorCitKU09iamVjdCog
UHJvZ3JhbUNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBpZiAocmVwbGFjZW1lbnQoKS0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6Om5leHRUaWVySklUKGdldEpJVFR5cGUoKSkpIHsKKyAgICAg
ICAgLy8gTm8gT1NSIHlldCwgc28gbWFrZSBzdXJlIHdlIGRvbid0IGhpdCB0aGlzIGFnYWluIGFu
eXRpbWUgc29vbi4KKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PFByb2dy
YW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkKGV4ZWMs
IHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK0pTT2JqZWN0KiBFdmFs
Q29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkgeworICAgICAgICAvLyBO
byBPU1IgeWV0LCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBz
b29uLgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFp
bk5vZGUpOworICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJs
b2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlKQoreworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkgeworICAgICAgICAvLyBObyBPU1Ig
eWV0LCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgor
ICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkRm9yKGV4ZWMsIHNjb3BlQ2hh
aW5Ob2RlLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwp
OworICAgIHJldHVybiBlcnJvcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDU1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTk4LDEyICs5OSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB9OwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzdHJ1Y3QgQ2FsbExpbmtJbmZvIHsKKyAg
ICBzdHJ1Y3QgQ2FsbExpbmtJbmZvOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExp
bmtJbmZvPiB7CiAgICAgICAgIENhbGxMaW5rSW5mbygpCiAgICAgICAgICAgICA6IGhhc1NlZW5T
aG91bGRSZXBhdGNoKGZhbHNlKQogICAgICAgICAgICAgLCBpc0NhbGwoZmFsc2UpCisgICAgICAg
ICAgICAsIGlzREZHKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIH5DYWxsTGlua0luZm8oKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNPbkxpc3Qo
KSkKKyAgICAgICAgICAgICAgICByZW1vdmUoKTsKKyAgICAgICAgfQogCiAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbjsgLy8gaXQncyBhIG5lYXIgY2FsbCBpbiB0
aGUgb2xkIEpJVCwgb3IgYSBub3JtYWwgY2FsbCBpbiBERkcKICAgICAgICAgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKQEAgLTExMSwxMyArMTE5LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwogICAg
ICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICAgICAgYm9vbCBpc0NhbGwg
OiAxOworICAgICAgICBib29sIGlzREZHIDogMTsKIAogICAgICAgICBib29sIGlzTGlua2VkKCkg
eyByZXR1cm4gY2FsbGVlOyB9Ci0gICAgICAgIHZvaWQgdW5saW5rKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgIGNhbGxl
ZS5jbGVhcigpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgdW5saW5rKEpTR2xvYmFsRGF0YSYs
IFJlcGF0Y2hCdWZmZXImKTsKIAogICAgICAgICBib29sIHNlZW5PbmNlKCkKICAgICAgICAgewpA
QCAtMjEwLDEzICsyMTUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHByb3RlY3RlZDoK
LSAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29k
ZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2ln
bmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBib29sIGlzQ29uc3Ry
dWN0b3IpOworICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBDb2RlVHlwZSwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSosIGJvb2wgaXNDb25zdHJ1Y3Rv
ciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKTsKIAogICAgICAgICBXcml0ZUJh
cnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBIZWFwKiBtX2hl
YXA7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNvZGVCbG9jaygpOworICAgICAg
ICAKKyAgICAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRp
dmUuZ2V0KCk7IH0KKyAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRlcm5h
dGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAKICAgICAgICAgdm9p
ZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHZpc2l0V2Vha1Jl
ZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKQEAgLTI3OSw2ICsyODcsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CisgICAgICAgIAor
ICAgICAgICBib29sIGhhc0luY29taW5nQ2FsbHMoKSB7IHJldHVybiBtX2luY29taW5nQ2FsbHMu
YmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCk7IH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgbGlua0luY29taW5nQ2FsbChDYWxsTGlua0luZm8qIGluY29taW5nKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoSU5URVJQUkVURVIpCkBAIC0zMDAsOCArMzE3LDE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2Rl
KCkgeyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRl
ZEpJVENvZGVGb3JDb25zdHJ1Y3QoKSA6IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRD
b2RlRm9yQ2FsbCgpOyB9CisgICAgICAgIHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2RlJiBj
b2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2ppdENvZGUgPSBjb2RlOworICAgICAgICAgICAgbV9qaXRDb2RlV2l0
aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgICAgIH0KKyAgICAgICAgSklU
Q29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQorICAgICAgICBKSVRDb2Rl
OjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgpOyB9CiAg
ICAgICAgIEV4ZWN1dGFibGVQb29sKiBleGVjdXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENv
ZGUoKS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKKyNlbHNlCisgICAgICAgIEpJ
VENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIEpJVENvZGU6OkJhc2VsaW5lSklU
OyB9CiAjZW5kaWYKIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUo
KSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQpAQCAtMzk4LDYgKzQy
NSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxl
Qnl0ZWNvZGVPZmZzZXQ+KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwg
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICB9CisgICAgICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQoaW50IGFyZ3VtZW50SW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCBpbmRleCA9IGFyZ3VtZW50SW5kZXggLSAxOworICAgICAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gbV92YWx1ZVByb2ZpbGVzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0g
dmFsdWVQcm9maWxlKGFyZ3VtZW50SW5kZXggLSAxKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQt
PmJ5dGVjb2RlT2Zmc2V0ICE9IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogI2VuZGlmCiAKICAgICAgICAgdW5zaWdu
ZWQgZ2xvYmFsUmVzb2x2ZUluZm9Db3VudCgpIGNvbnN0CkBAIC01MzUsNiArNTcyLDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBFdmFsQ29kZUNhY2hlJiBldmFsQ29kZUNhY2hlKCkgeyBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2V2YWxDb2Rl
Q2FjaGU7IH0KIAogICAgICAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgICAgIAorICAgICAg
ICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CisgICAgICAgIAorICAgICAgICB2b2lk
IG9wdGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1
dGVDb3VudGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkb250T3B0
aW1pemVBbnl0aW1lU29vbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50
ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUuCiAKQEAgLTU5NCw2ICs2
NDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEdsb2JhbFJlc29sdmVJbmZv
PiBtX2dsb2JhbFJlc29sdmVJbmZvczsKICAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9j
YWxsTGlua0luZm9zOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbExpbmtJbmZvPiBtX21ldGhv
ZENhbGxMaW5rSW5mb3M7CisgICAgICAgIEpJVENvZGUgbV9qaXRDb2RlOworICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgICAgIFNlbnRp
bmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5r
SW5mbz4gPiBtX2luY29taW5nQ2FsbHM7CiAjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9m
aWxlczsKQEAgLTYxMCw2ICs2NjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1i
b2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAorICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisKICAgICAgICAgc3Ry
dWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAg
ICAgIHB1YmxpYzoKQEAgLTY0Niw5ICs3MDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBy
ZXNwb25zaWJsZSBmb3IgbWFya2luZyBpdC4KIAogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6
IHB1YmxpYyBDb2RlQmxvY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgR2xvYmFsQ29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpCi0gICAgICAgICAgICA6IENvZGVC
bG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3Zp
ZGVyLCBzb3VyY2VPZmZzZXQsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUsIGZhbHNlKQorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKKyAgICAgICAg
ICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwg
c291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFs
c2UsIGFsdGVybmF0aXZlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjU4LDE2ICs3MTQs
MjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVi
bGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGljOgotICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlcikKLSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
Q29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4g
YWx0ZXJuYXRpdmUpCisgICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFi
bGUsIGNvZGVUeXBlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2
ZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiBy
ZXBsYWNlbWVudCgpOworI2VuZGlmCiAgICAgfTsKIAogICAgIGNsYXNzIEV2YWxDb2RlQmxvY2sg
OiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV2YWxDb2Rl
QmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIGlu
dCBiYXNlU2NvcGVEZXB0aCkKLSAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDApCisgICAg
ICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVy
bmF0aXZlKQorICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBF
dmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAg
ICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgoYmFzZVNjb3BlRGVwdGgpCiAgICAgICAgIHsK
ICAgICAgICAgfQpAQCAtNjgxLDYgKzc0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgbV92YXJpYWJs
ZXMuc3dhcCh2YXJpYWJsZXMpOwogICAgICAgICB9CisgICAgICAgIAorI2lmIEVOQUJMRShKSVQp
CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgQ29kZUJs
b2NrKiByZXBsYWNlbWVudCgpOworI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQg
bV9iYXNlU2NvcGVEZXB0aDsKQEAgLTY5MywxNCArNzYxLDIwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBhcyB3ZSBuZWVkIHRvIGluaXRpYWxpc2UgdGhlIENvZGVCbG9jayBiZWZvcmUg
d2UgY291bGQgaW5pdGlhbGlzZSBhbnkgUmVmUHRyIHRvIGhvbGQgdGhlIHNoYXJlZAogICAgICAg
ICAvLyBzeW1ib2wgdGFibGUsIHNvIHdlIGp1c3QgcGFzcyBhcyBhIHJhdyBwb2ludGVyIHdpdGgg
YSByZWYgY291bnQgb2YgMS4gIFdlIHRoZW4gbWFudWFsbHkgZGVyZWYKICAgICAgICAgLy8gaW4g
dGhlIGRlc3RydWN0b3IuCi0gICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIs
IHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgYm9vbCBpc0NvbnN0cnVjdG9yKQotICAgICAgICAgICAg
OiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3Vy
Y2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCkubGVh
a1JlZigpLCBpc0NvbnN0cnVjdG9yKQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhGdW5jdGlv
bkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093
blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3du
ZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291
cmNlT2Zmc2V0LCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlKCkubGVha1JlZigpLCBpc0NvbnN0
cnVjdG9yLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIH5GdW5j
dGlvbkNvZGVCbG9jaygpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxl
KCktPmRlcmVmKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CisjZW5kaWYKICAgICB9OwogCiAgICAgaW5saW5lIFJlZ2lzdGVyJiBFeGVj
U3RhdGU6OnIoaW50IGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIGNvdW50cyAqIGNlcnRhaW50eSAvIG51bWJlck9mU2FtcGxlczsKICAgICB9Ci0g
ICAgICAgIAorICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mSW50MzJzKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CkBAIC0xNDIsNiArMTQyLDg2IEBAIHN0cnVj
dCBWYWx1ZVByb2ZpbGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0
eShudW1iZXJPZkFycmF5cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7CiAgICAgfQorCisjaWZuZGVm
IE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgeworICAgICAgICBmcHJpbnRm
KG91dCwKKyAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1LCBkb3VibGUg
PSAldSwgY2VsbCA9ICV1LCBhcnJheSA9ICV1IiwKKyAgICAgICAgICAgICAgICBudW1iZXJPZlNh
bXBsZXMoKSwKKyAgICAgICAgICAgICAgICBudW1iZXJPZkludDMycygpLAorICAgICAgICAgICAg
ICAgIG51bWJlck9mRG91YmxlcygpLAorICAgICAgICAgICAgICAgIG51bWJlck9mQ2VsbHMoKSwK
KyAgICAgICAgICAgICAgICBudW1iZXJPZkFycmF5cygpKTsKKyAgICAgICAgYm9vbCBmaXJzdCA9
IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7
ICsraSkgeworICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSB8fCAhIXdlYWtCdWNrZXRzW2ld
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIGZw
cmludGYob3V0LCAiOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIs
ICIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoISFidWNr
ZXRzW2ldKQorICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiJXMiLCBKU1ZhbHVlOjpkZWNv
ZGUoYnVja2V0c1tpXSkuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghIXdlYWtCdWNrZXRzW2ldKQorICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiRGVh
ZENlbGwiKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIAorICAgIHN0cnVjdCBTdGF0
aXN0aWNzIHsKKyAgICAgICAgdW5zaWduZWQgc2FtcGxlczsKKyAgICAgICAgdW5zaWduZWQgaW50
MzJzOworICAgICAgICB1bnNpZ25lZCBkb3VibGVzOworICAgICAgICB1bnNpZ25lZCBjZWxsczsK
KyAgICAgICAgdW5zaWduZWQgYXJyYXlzOworICAgIH07CisKKyAgICAvLyBPcHRpbWl6ZWQgbWV0
aG9kIGZvciBnZXR0aW5nIGFsbCBjb3VudHMgYXQgb25jZS4KKyAgICB2b2lkIGNvbXB1dGVTdGF0
aXN0aWNzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RhdGlzdGljcyYgc3RhdGlzdGljcykg
Y29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNhbXBsZXMgPSAwOworICAgICAgICB1bnNp
Z25lZCBpbnQzMnMgID0gMDsKKyAgICAgICAgdW5zaWduZWQgZG91YmxlcyA9IDA7CisgICAgICAg
IHVuc2lnbmVkIGNlbGxzICAgPSAwOworICAgICAgICB1bnNpZ25lZCBhcnJheXMgID0gMDsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFidWNrZXRzW2ldKSB7CisgICAgICAgICAgICAgICAg
V2Vha0J1Y2tldCB3ZWFrQnVja2V0ID0gd2Vha0J1Y2tldHNbaV07CisgICAgICAgICAgICAgICAg
aWYgKCEhd2Vha0J1Y2tldCkgeworICAgICAgICAgICAgICAgICAgICBzYW1wbGVzKys7CisgICAg
ICAgICAgICAgICAgICAgIGNlbGxzKys7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ZWFrQnVj
a2V0LmdldENsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8pCisgICAgICAgICAgICAgICAg
ICAgICAgICBhcnJheXMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNhbXBsZXMrKzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgaW50MzJzKys7CisgICAgICAgICAgICBlbHNl
IGlmICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAgICAgICAgIGRvdWJsZXMrKzsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgY2VsbHMr
KzsKKyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZnbG9iYWxEYXRhLCB2YWx1ZS5hc0Nl
bGwoKSkpCisgICAgICAgICAgICAgICAgICAgIGFycmF5cysrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aXN0aWNzLnNhbXBsZXMgPSBzYW1wbGVzOwor
ICAgICAgICBzdGF0aXN0aWNzLmludDMycyAgPSBpbnQzMnM7CisgICAgICAgIHN0YXRpc3RpY3Mu
ZG91YmxlcyA9IGRvdWJsZXM7CisgICAgICAgIHN0YXRpc3RpY3MuY2VsbHMgICA9IGNlbGxzOwor
ICAgICAgICBzdGF0aXN0aWNzLmFycmF5cyAgPSBhcnJheXM7CisgICAgfQogICAgIAogICAgIGlu
dCBieXRlY29kZU9mZnNldDsgLy8gLTEgZm9yIHByb2xvZ3VlCiAgICAgRW5jb2RlZEpTVmFsdWUg
YnVja2V0c1tudW1iZXJPZkJ1Y2tldHNdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDk0NTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwcmVzZXJ2ZUxhc3RWYXIoCiAgICAgICAgIG1fbGFzdFZhciA9ICZtX2Nh
bGxlZVJlZ2lzdGVycy5sYXN0KCk7CiB9CiAKLUJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9j
aykKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSogcHJv
Z3JhbU5vZGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUsIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25LaW5kIGNvbXBp
bGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFpbi0+Z2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHNj
b3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAsIG1fc2hv
dWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNS
aWNoU291cmNlSW5mbygpKQpAQCAtMjI4LDYgKzIyOCw5IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcihQcm8KICAgICAKICAgICBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzID0gMTsgLy8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlzIgogICAgIGNvZGVCbG9jay0+bV9u
dW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICAKKyAgICBpZiAoY29t
cGlsYXRpb25LaW5kID09IE9wdGltaXppbmdDb21waWxhdGlvbikKKyAgICAgICAgcmV0dXJuOwog
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4tPmdsb2JhbE9i
amVjdC5nZXQoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKQEAgLTI1OCw3ICsyNjEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoUHJvCiAgICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0J5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5j
dGlvbkJvZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbktpbmQpCiAgICAgOiBtX3No
b3VsZEVtaXREZWJ1Z0hvb2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSkK
ICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcyhzY29wZUNoYWluLT5nbG9iYWxPYmplY3Qt
PnN1cHBvcnRzUHJvZmlsaW5nKCkpCiAgICAgLCBtX3Nob3VsZEVtaXRSaWNoU291cmNlSW5mbyhz
Y29wZUNoYWluLT5nbG9iYWxPYmplY3QtPnN1cHBvcnRzUmljaFNvdXJjZUluZm8oKSkKQEAgLTQx
OSw3ICs0MjIsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAg
ICAgfQogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUq
IGV2YWxOb2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbXBpbGF0aW9uS2luZCkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3Moc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhv
b2tzKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3VwcG9ydHNQcm9maWxpbmcoKSkKICAgICAs
IG1fc2hvdWxkRW1pdFJpY2hTb3VyY2VJbmZvKHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+c3Vw
cG9ydHNSaWNoU291cmNlSW5mbygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTQ1NTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDkgKzkyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXREdW1wc0dlbmVyYXRlZENvZGUo
Ym9vbCBkdW1wc0dlbmVyYXRlZENvZGUpOwogICAgICAgICBzdGF0aWMgYm9vbCBkdW1wc0dlbmVy
YXRlZENvZGUoKTsKIAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIFNj
b3BlQ2hhaW5Ob2RlKiwgU3ltYm9sVGFibGUqLCBQcm9ncmFtQ29kZUJsb2NrKik7Ci0gICAgICAg
IEJ5dGVjb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBTY29wZUNoYWluTm9kZSosIFN5
bWJvbFRhYmxlKiwgQ29kZUJsb2NrKik7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxO
b2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqKTsKKyAg
ICAgICAgZW51bSBDb21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5n
Q29tcGlsYXRpb24gfTsKKyAgICAgICAgCisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFByb2dy
YW1Ob2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIFByb2dyYW1Db2RlQmxvY2sq
LCBDb21waWxhdGlvbktpbmQpOworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJv
ZHlOb2RlKiwgU2NvcGVDaGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIENvbXBp
bGF0aW9uS2luZCk7CisgICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgU2NvcGVD
aGFpbk5vZGUqLCBTeW1ib2xUYWJsZSosIEV2YWxDb2RlQmxvY2sqLCBDb21waWxhdGlvbktpbmQp
OwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsRGF0YTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlO
YW1lcygpIGNvbnN0IHsgcmV0dXJuICptX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXM7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiA5NDU1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY29tcGlsZSB0
aGUgZGF0YWZsb3cgZ3JhcGggZnJvbSBhIENvZGVCbG9jay4KIGNsYXNzIEJ5dGVDb2RlUGFyc2Vy
IHsKIHB1YmxpYzoKLSAgICBCeXRlQ29kZVBhcnNlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IENvZGVCbG9jayogY29kZUJsb2NrLCBHcmFwaCYgZ3JhcGgpCisgICAgQnl0ZUNvZGVQYXJzZXIo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogbV9nbG9iYWxEYXRhKGds
b2JhbERhdGEpCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1f
cHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCiAg
ICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAgICAgLCBtX3BhcnNlRmFpbGVkKGZhbHNl
KQpAQCAtNjUsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygw
KQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgIHsKKyNpZiBFTkFCTEUoRFlO
QU1JQ19PUFRJTUlaQVRJT04pCisgICAgICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOworI2Vu
ZGlmCiAgICAgfQogCiAgICAgLy8gUGFyc2UgYSBmdWxsIENvZGVCbG9jayBvZiBieXRlY29kZS4K
QEAgLTEwMiw5ICsxMDYsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwu
CiAgICAgICAgIHJldHVybiBnZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCk7CiAgICAgfQotICAg
IHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUsIFByZWRpY3RlZFR5cGUgc3Rh
dGljUHJlZGljdGlvbiA9IFByZWRpY3ROb25lKQorICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBO
b2RlSW5kZXggdmFsdWUsIFByZWRpY3RlZFR5cGUgd2Vha1ByZWRpY3Rpb24gPSBQcmVkaWN0Tm9u
ZSkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgucHJlZGljdChvcGVyYW5kLCBzdGF0aWNQcmVkaWN0
aW9uLCBTdGF0aWNQcmVkaWN0aW9uKTsKKyAgICAgICAgbV9ncmFwaC5wcmVkaWN0KG9wZXJhbmQs
IHdlYWtQcmVkaWN0aW9uLCBXZWFrUHJlZGljdGlvbik7CiAKICAgICAgICAgLy8gSXMgdGhpcyBh
biBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CkBA
IC00MjEsMTkgKzQyNSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGFyZ0lkeCkpOwogICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6
VmFyQXJnLCBvcCwgT3BJbmZvKDApLCBPcEluZm8oUHJlZGljdE5vbmUpKTsKICAgICAgICAgSW5z
dHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xF
TkdUSChvcF9jYWxsKTsKLSAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJ
bnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAgICAgaWYg
KGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9w
X2NhbGxfcHV0X3Jlc3VsdCkgewogICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgY2FsbCk7CisgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoY2FsbCwgbV9jdXJy
ZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpKTsKKyAgICAgICAgfQogICAgICAgICBp
ZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgKHVuc2lnbmVkKWFyZ0NvdW50
ID4gbV9wYXJhbWV0ZXJTbG90cykKICAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMgPSBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKICAgICAgICAgcmV0dXJu
IGNhbGw7CiAgICAgfQogCi0gICAgdm9pZCBzdGF0aWNhbGx5UHJlZGljdEFycmF5KE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgdm9pZCB3ZWFrbHlQcmVkaWN0QXJyYXkoTm9kZUluZGV4IG5vZGVJ
bmRleCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgucHJlZGljdChtX2dyYXBoW25vZGVJbmRleF0s
IFByZWRpY3RBcnJheSwgU3RhdGljUHJlZGljdGlvbik7CisgICAgICAgIG1fZ3JhcGgucHJlZGlj
dChtX2dyYXBoW25vZGVJbmRleF0sIFByZWRpY3RBcnJheSwgV2Vha1ByZWRpY3Rpb24pOwogICAg
IH0KIAotICAgIHZvaWQgc3RhdGljYWxseVByZWRpY3RJbnQzMihOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIHZvaWQgd2Vha2x5UHJlZGljdEludDMyKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9yZXVzYWJsZU5vZGVTdGFjay5pc0VtcHR5KCkpOwogICAgICAg
ICBtX3JldXNhYmxlTm9kZVN0YWNrLmFwcGVuZCgmbV9ncmFwaFtub2RlSW5kZXhdKTsKQEAgLTQ1
NywxNCArNDYzLDM3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVT
dGFjay5hcHBlbmQoJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQyKCldKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5w
cmVkaWN0KCpub2RlUHRyLCBQcmVkaWN0SW50MzIsIFN0YXRpY1ByZWRpY3Rpb24pOworICAgICAg
ICAgICAgICAgIG1fZ3JhcGgucHJlZGljdCgqbm9kZVB0ciwgUHJlZGljdEludDMyLCBXZWFrUHJl
ZGljdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gd2hpbGUgKCFtX3JldXNhYmxlTm9kZVN0YWNrLmlzRW1wdHkoKSk7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgc3Ryb25nbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5kZXgsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCisgICAgeworI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKyAg
ICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gbV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHByb2Zp
bGUpOworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgIHByaW50ZigiRHluYW1pYyBwcmVk
aWN0aW9uIFsldSwgJXVdOiAiLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBw
cm9maWxlLT5kdW1wKHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAg
ICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJlZGljdChtYWtlUHJlZGljdGlvbigqbV9nbG9iYWxE
YXRhLCAqcHJvZmlsZSksIFN0cm9uZ1ByZWRpY3Rpb24pOworI2Vsc2UKKyAgICAgICAgVU5VU0VE
X1BBUkFNKG5vZGVJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
KyNlbmRpZgorICAgIH0KKyAgICAKKyAgICB2b2lkIHN0cm9uZ2x5UHJlZGljdChOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgc3Ryb25nbHlQcmVkaWN0KG5vZGVJbmRleCwgbV9j
dXJyZW50SW5kZXgpOworICAgIH0KIAogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwog
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxv
Y2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKICAgICAvLyBUaGUgY3VycmVudCBibG9jayBiZWlu
ZyBnZW5lcmF0ZWQuCkBAIC01NjMsNyArNTkyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9j
dXJyZW50SW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsKICAgICAg
ICAgfQotCisgICAgICAgIAogICAgICAgICAvLyBTd2l0Y2ggb24gdGhlIGN1cnJlbnQgYnl0ZWNv
ZGUgb3Bjb2RlLgogICAgICAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gaW5z
dHJ1Y3Rpb25zQmVnaW4gKyBtX2N1cnJlbnRJbmRleDsKICAgICAgICAgc3dpdGNoIChpbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKQEAgLTU4
Nyw4ICs2MTYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0
VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAgICAg
c3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdElu
dDMyKG9wMSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEJpdEFu
ZCwgb3AxLCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Yml0YW5kKTsKICAgICAgICAgfQpAQCAtNTk2LDggKzYyNSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9iaXRvcjogewogICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0
SW50MzIob3AxKTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AyKTsKKyAg
ICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDEpOworICAgICAgICAgICAgd2Vha2x5UHJl
ZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChCaXRPciwgb3AxLCBvcDIpLCBQcmVkaWN0SW50MzIpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfYml0b3IpOwogICAgICAgICB9CkBAIC02MDUsOCArNjM0
LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBj
YXNlIG9wX2JpdHhvcjogewogICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvSW50MzIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXgg
b3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgIHN0YXRpY2Fs
bHlQcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDEp
OworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChCaXRYb3IsIG9wMSwg
b3AyKSwgUHJlZGljdEludDMyKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdHhvcik7
CiAgICAgICAgIH0KQEAgLTYxNCw4ICs2NDMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CiAgICAgICAgICAgICBO
b2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0ludDMyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihv
cDEpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAg
ICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50
MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7CiAgICAgICAgICAgICAvLyBP
cHRpbWl6ZSBvdXQgc2hpZnRzIGJ5IHplcm8uCiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG9wMikgJiYgISh2YWx1ZU9mSW50MzJDb25zdGFudChvcDIpICYgMHgxZikpCkBAIC02Mjks
OCArNjU4LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICBjYXNlIG9wX2xzaGlmdDogewogICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRv
SW50MzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggb3AyID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3AxKTsKLSAgICAgICAgICAgIHN0
YXRpY2FsbHlQcmVkaWN0SW50MzIob3AyKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQz
MihvcDEpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMik7CiAgICAgICAgICAg
ICBOb2RlSW5kZXggcmVzdWx0OwogICAgICAgICAgICAgLy8gT3B0aW1pemUgb3V0IHNoaWZ0cyBi
eSB6ZXJvLgogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChvcDIpICYmICEodmFsdWVP
ZkludDMyQ29uc3RhbnQob3AyKSAmIDB4MWYpKQpAQCAtNjQ0LDggKzY3Myw4IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF91cnNoaWZ0
OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9JbnQzMihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb0lu
dDMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGlj
YWxseVByZWRpY3RJbnQzMihvcDEpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQz
MihvcDIpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKG9wMSk7CisgICAgICAgICAg
ICB3ZWFrbHlQcmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIE5vZGVJbmRleCByZXN1bHQ7
CiAgICAgICAgICAgICAvLyBUaGUgcmVzdWx0IG9mIGEgemVyby1leHRlbmRpbmcgcmlnaHQgc2hp
ZnQgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZS4KICAgICAgICAgICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCBpZiB0aGUgdG9wIGJpdCBpcyBzZXQsIHRoZSByZXN1bHQgaXMgbm90IGluIHRo
ZSBpbnQzMiByYW5nZSwKQEAgLTY3NSw3ICs3MDQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHJlX2luYzogewogICAgICAgICAg
ICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAg
ICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7Ci0gICAgICAgICAg
ICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wKTsKKyAgICAgICAgICAgIHdlYWtseVByZWRpY3RJ
bnQzMihvcCk7CiAgICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dyYXBoKEFyaXRoQWRkLCBv
cCwgb25lKCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3ByZV9pbmMpOwogICAgICAg
ICB9CkBAIC02ODQsNyArNzEzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AgPSBnZXRUb051
bWJlcihzcmNEc3QpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcCk7Cisg
ICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwogICAgICAgICAgICAgc2V0KHJlc3Vs
dCwgb3ApOwogICAgICAgICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0aEFkZCwgb3As
IG9uZSgpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wb3N0X2luYyk7CkBAIC02OTMs
NyArNzIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICBjYXNlIG9wX3ByZV9kZWM6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3Ag
PSBnZXRUb051bWJlcihzcmNEc3QpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQz
MihvcCk7CisgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwogICAgICAgICAgICAg
c2V0KHNyY0RzdCwgYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9wcmVfZGVjKTsKICAgICAgICAgfQpAQCAtNzAyLDcgKzczMSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwog
ICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKLSAgICAgICAg
ICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50MzIob3ApOworICAgICAgICAgICAgd2Vha2x5UHJlZGlj
dEludDMyKG9wKTsKICAgICAgICAgICAgIHNldChyZXN1bHQsIG9wKTsKICAgICAgICAgICAgIHNl
dChzcmNEc3QsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfcG9zdF9kZWMpOwpAQCAtNzE3LDggKzc0Niw4IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIC8vIElmIGJvdGggb3Bl
cmFuZHMgY2FuIHN0YXRpY2FsbHkgYmUgZGV0ZXJtaW5lZCB0byB0aGUgbnVtYmVycywgdGhlbiB0
aGlzIGlzIGFuIGFyaXRobWV0aWMgYWRkLgogICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBt
dXN0IGFzc3VtZSB0aGlzIG1heSBiZSBwZXJmb3JtaW5nIGEgY29uY2F0ZW5hdGlvbiB0byBhIHN0
cmluZy4KICAgICAgICAgICAgIGlmIChpc1NtYWxsSW50MzJDb25zdGFudChvcDEpIHx8IGlzU21h
bGxJbnQzMkNvbnN0YW50KG9wMikpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGlj
dEludDMyKG9wMSk7Ci0gICAgICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIp
OworICAgICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDEpOworICAgICAgICAgICAg
ICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKG1fZ3JhcGhbb3AxXS5oYXNOdW1lcmljUmVzdWx0KCkgJiYgbV9ncmFwaFtvcDJdLmhhc051
bWVyaWNSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFkZCwgdG9OdW1iZXIob3AxKSwgdG9OdW1iZXIo
b3AyKSkpOwpAQCAtNzMyLDggKzc2MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb051bWJlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIg
PSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAg
ICAgIGlmIChpc1NtYWxsSW50MzJDb25zdGFudChvcDEpIHx8IGlzU21hbGxJbnQzMkNvbnN0YW50
KG9wMikpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEludDMyKG9wMSk7Ci0g
ICAgICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihvcDIpOworICAgICAgICAgICAg
ICAgIHdlYWtseVByZWRpY3RJbnQzMihvcDEpOworICAgICAgICAgICAgICAgIHdlYWtseVByZWRp
Y3RJbnQzMihvcDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wMSwgb3AyKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwpAQCAtODc4LDExICs5MDcsMTIgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2dl
dF9ieV92YWw6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IHByb3BlcnR5ID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc3RhdGlj
YWxseVByZWRpY3RBcnJheShiYXNlKTsKLSAgICAgICAgICAgIHN0YXRpY2FsbHlQcmVkaWN0SW50
MzIocHJvcGVydHkpOworICAgICAgICAgICAgd2Vha2x5UHJlZGljdEFycmF5KGJhc2UpOworICAg
ICAgICAgICAgd2Vha2x5UHJlZGljdEludDMyKHByb3BlcnR5KTsKIAogICAgICAgICAgICAgTm9k
ZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8o
UHJlZGljdE5vbmUpLCBiYXNlLCBwcm9wZXJ0eSwgYWxpYXNlcy5sb29rdXBHZXRCeVZhbChiYXNl
LCBwcm9wZXJ0eSkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGdldEJ5VmFsKTsKKyAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeVZhbCk7
CiAgICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5VmFsKTsKIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC04OTIsOCArOTIyLDggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUlu
ZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzdGF0aWNhbGx5UHJlZGljdEFycmF5KGJh
c2UpOwotICAgICAgICAgICAgc3RhdGljYWxseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CisgICAg
ICAgICAgICB3ZWFrbHlQcmVkaWN0QXJyYXkoYmFzZSk7CisgICAgICAgICAgICB3ZWFrbHlQcmVk
aWN0SW50MzIocHJvcGVydHkpOwogCiAgICAgICAgICAgICBOb2RlSW5kZXggYWxpYXNlZEdldCA9
IGFsaWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgTm9k
ZUluZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9IE5vTm9kZSA/IFB1dEJ5
VmFsQWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKQEAgLTkxMiw2ICs5
NDIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBnZXRNZXRob2QgPSBhZGRUb0dyYXBoKEdldE1l
dGhvZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKICAg
ICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldE1ldGhvZCk7Cisg
ICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0TWV0aG9kKTsKICAgICAgICAgICAgIGFsaWFz
ZXMucmVjb3JkR2V0TWV0aG9kKGdldE1ldGhvZCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgob3BfbWV0aG9kX2NoZWNrKSArIE9QQ09E
RV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsKQEAgLTkyNSw2ICs5NTYsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5v
ZGVJbmRleCBnZXRCeUlkID0gYWRkVG9HcmFwaChHZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciks
IE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5SWQpOworICAgICAgICAgICAgc3Ryb25nbHlQcmVk
aWN0KGdldEJ5SWQpOwogICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRCeUlkKGdldEJ5SWQp
OwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfaWQpOwpAQCAtMTM1MCw3ICsx
MzgyLDcgQEAgYm9vbCBwYXJzZShHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0YSogZwogICAgIFVO
VVNFRF9QQVJBTShjb2RlQmxvY2spOwogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0
dXJuIEJ5dGVDb2RlUGFyc2VyKGdsb2JhbERhdGEsIGNvZGVCbG9jaywgZ3JhcGgpLnBhcnNlKCk7
CisgICAgcmV0dXJuIEJ5dGVDb2RlUGFyc2VyKGdsb2JhbERhdGEsIGNvZGVCbG9jaywgY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLCBncmFwaCkucGFyc2UoKTsKICNlbmRpZgogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdEcml2ZXIuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIKKyNpbmNsdWRlICJE
RkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR1Byb3BhZ2F0b3IuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0
aW9uLCBDb21waWxlT3RoZXIgfTsKK2lubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29t
cGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgR3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1Q
YXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgaWYgKCFwYXJzZShkZmcsIGds
b2JhbERhdGEsIGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBp
ZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQorICAgICAgICBkZmcucHJlZGljdEFy
Z3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMsIGNvZGVCbG9jayk7CisgICAgCisgICAgcHJvcGFn
YXRlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICBKSVRDb21waWxlciBk
YXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CisgICAgaWYgKGNvbXBpbGVN
b2RlID09IENvbXBpbGVGdW5jdGlvbikgeworICAgICAgICBBU1NFUlQoaml0Q29kZVdpdGhBcml0
eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklULmNvbXBpbGVGdW5jdGlvbihq
aXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBB
U1NFUlQoY29tcGlsZU1vZGUgPT0gQ29tcGlsZU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgZGF0YUZsb3dKSVQuY29tcGls
ZShqaXRDb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdHJ5Q29tcGls
ZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2Rl
KQoreworICAgIHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywgMCwgY29kZUJsb2Nr
LCBqaXRDb2RlLCAwKTsKK30KKworYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklU
Q29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spCit7CisgICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjYWxsZWVB
cmdzRXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdEcml2ZXJfaAorI2RlZmluZSBERkdEcml2ZXJfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7
CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVRDb2RlOworY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOworCituYW1lc3BhY2UgREZHIHsKKworI2lmIEVOQUJMRShERkdfSklUKQorYm9vbCB0
cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmKTsKK2Jvb2wgdHJ5Q29t
cGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVC
bG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlD
aGVjayk7CisjZWxzZQoraW5saW5lIGJvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCBKSVRDb2RlJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIHRyeUNvbXBpbGVG
dW5jdGlvbihFeGVjU3RhdGUqLCBFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBKSVRDb2RlJiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyJikgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMCBAQCB2
b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgfQogICAgIGlmIChv
cCA9PSBKU0NvbnN0YW50KSB7CiAgICAgICAgIHByaW50ZigiJXMkJXUiLCBoYXNQcmludGVkID8g
IiwgIiA6ICIiLCBub2RlLmNvbnN0YW50TnVtYmVyKCkpOworICAgICAgICBpZiAoY29kZUJsb2Nr
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2spOworICAgICAgICAgICAgcHJpbnRmKCIgPSAlcyIsIHZhbHVlLmRlc2NyaXB0aW9u
KCkpOworICAgICAgICB9CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBp
ZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7CkBAIC0xODYsMTcgKzE5MCw0
NyBAQCB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlSW5kZXggb3ApCiAgICAgfQogfQogCi12
b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEdy
YXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrKQogewotICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWluKGV4ZWMt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXpl
KCkpOwotCi0gICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwgbnVtYmVyT2ZBcmd1bWVudHM7
ICsrYXJnKSB7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KGFyZyAtIDEpOwotICAgICAgICBpZiAoYXJndW1lbnRWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAg
ICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsK
LSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRWYWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAg
bV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10ubV92YWx1ZSB8PSBQcmVkaWN0RG91YmxlOworICAg
IGlmIChleGVjKSB7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cyA9IHN0ZDo6bWlu
KGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIG1fYXJndW1lbnRQcmVkaWN0aW9u
cy5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMTsgYXJnIDwg
bnVtYmVyT2ZBcmd1bWVudHM7ICsrYXJnKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50
VmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmcgLSAxKTsKKyAgICAgICAgICAgIGlmIChhcmd1bWVu
dFZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlvbnNb
YXJnXS5tX3ZhbHVlIHw9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3Vt
ZW50VmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50UHJlZGljdGlv
bnNbYXJnXS5tX3ZhbHVlIHw9IFByZWRpY3REb3VibGU7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIEFTU0VSVChjb2RlQmxvY2sp
OworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKTsKKworICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBDb2RlQmxvY2sqIHByb2Zp
bGVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIEFTU0VSVChjb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyA+PSAxKTsKKyAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKTsgKyth
cmcpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRDb2RlQmxvY2st
PnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgIGlmICghcHJvZmlsZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAg
ICAgICBwcmludGYoIkFyZ3VtZW50IHByb2ZpbGUgWyVsdV06ICIsIGFyZyk7CisgICAgICAgIHBy
b2ZpbGUtPmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAg
ICAgIAorICAgICAgICBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ10u
bV92YWx1ZSwgbWFrZVByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgKnByb2ZpbGUpKTsKKyAgICAgICAg
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjog
JXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2FyZ3VtZW50UHJlZGljdGlvbnNbYXJnXS5tX3Zh
bHVlKSk7CisjZW5kaWYKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2sp
OworI2VuZGlmCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw5IEBA
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPFJlZ2lzdGVyRmlsZS5oPgotI2lu
Y2x1ZGUgPGRmZy9ERkdOb2RlLmg+CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
REZHTm9kZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KQEAgLTEzNSwxMiArMTM2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2Js
b2Nrc1tibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVCZWdpbildOwogICAgIH0K
IAotICAgIHZvaWQgcHJlZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
LCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQs
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAg
ewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRQcmVkaWN0aW9ucy5zaXpl
KCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgICAgICAgICBtZXJn
ZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtl
UHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVudFByZWRpY3Rpb25zW2Fy
Z3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFy
aWFibGVQcmVkaWN0aW9ucy5zaXplKCkpIHsKQEAgLTE0OCwzNyArMTQ4LDM3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fdmFyaWFibGVQcmVkaWN0aW9ucy5yZXNpemUob3BlcmFuZCArIDEpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZVBy
ZWRpY3Rpb25zW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNv
dXJjZSkpOworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFibGVQcmVkaWN0
aW9uc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2Up
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZhck51
bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkK
KyAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKICAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9i
YWxWYXJQcmVkaWN0aW9ucy5maW5kKHZhck51bWJlciArIDEpOwogICAgICAgICBpZiAoaXRlciA9
PSBtX2dsb2JhbFZhclByZWRpY3Rpb25zLmVuZCgpKSB7CiAgICAgICAgICAgICBQcmVkaWN0aW9u
U2xvdCBwcmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihwcmVkaWN0
aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb25TbG90Lm1f
dmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwogICAgICAgICAgICAg
bV9nbG9iYWxWYXJQcmVkaWN0aW9ucy5hZGQodmFyTnVtYmVyICsgMSwgcHJlZGljdGlvblNsb3Qp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24sIHNvdXJjZSkpOworICAgICAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihp
dGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIGJvb2wgcHJlZGljdChO
b2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291
cmNlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbiwgc291
cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlv
biwgc291cmNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZh
cjoKLSAgICAgICAgICAgIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGlj
dGlvbiwgc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIHBy
ZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKICAg
ICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldE1ldGhvZDoKICAgICAgICAgY2Fz
ZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoK
LSAgICAgICAgICAgIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAg
ICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOwogICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTIyNiwxMiArMjI2LDQzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBQcmVkaWN0Tm9uZTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvLyBIZWxw
ZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgorICAgIGJvb2wgaXNDb25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJ
bmRleCkuaXNDb25zdGFudCgpOworICAgIH0KKyAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkuaXNDb25z
dGFudCgpOworICAgIH0KKyAgICBib29sIGlzSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2Rl
SW5kZXgpLmlzSW50MzJDb25zdGFudChjb2RlQmxvY2spOworICAgIH0KKyAgICBib29sIGlzRG91
YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0RvdWJsZUNvbnN0YW50KGNvZGVC
bG9jayk7CisgICAgfQorICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMg
ZnJvbSBub2Rlcy4KKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29k
ZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5v
ZGVJbmRleCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICB9CisgICAgaW50MzJf
dCB2YWx1ZU9mSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZJbnQz
MkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgfQorICAgIGRvdWJsZSB2YWx1ZU9mRG91YmxlQ29u
c3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52YWx1ZU9mRG91YmxlQ29uc3RhbnQoY29kZUJs
b2NrKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKm9w
TmFtZShOb2RlVHlwZSk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMo
RXhlY1N0YXRlKik7CisgICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhdGUqLCBD
b2RlQmxvY2sqKTsKIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9j
a3M7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24g
OTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEzLDYgKzkxMyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxpbmso
TGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2Nr
LT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8uaXNDYWxsID0gbV9qc0NhbGxzW2ldLm1f
aXNDYWxsOworICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jYWxsUmV0
dXJuTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9q
c0NhbGxzW2ldLm1fc2xvd0NhbGwpKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAg
IGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0Nh
bGxzW2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNywzOSArMjA3LDE0IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBm
b3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdyYXBoKClbbm9kZUluZGV4XS5pc0NvbnN0YW50KCk7Ci0g
ICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ3JhcGgoKVtub2RlSW5kZXhdLmlzQ29uc3RhbnQoKTsKLSAgICB9Ci0g
ICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KE5v
ZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNKU0NvbnN0YW50KG5v
ZGVJbmRleCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051bWJlcigpOwotICAg
IH0KKyAgICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3Jh
cGgoKS5pc0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSlNDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBncmFwaCgpLmlzSlNDb25zdGFudChub2RlSW5kZXgp
OyB9CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1
cm4gZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ3Jh
cGgoKS5pc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgpOyB9CiAgICAgLy8g
SGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFs
dWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0
YW50SW5kZXggPSBncmFwaCgpW25vZGVJbmRleF0uY29uc3RhbnROdW1iZXIoKTsKLSAgICAgICAg
cmV0dXJuIGNvZGVCbG9jaygpLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4ICsgY29uc3RhbnRJbmRleCkuZ2V0KCk7Ci0gICAgfQotICAgIGludDMyX3QgdmFsdWVP
ZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlND
b25zdGFudChub2RlSW5kZXgpLmFzSW50MzIoKTsKLSAgICB9Ci0gICAgZG91YmxlIHZhbHVlT2ZE
b3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlND
b25zdGFudChub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAgIH0KKyAgICBKU1Zh
bHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBo
KCkudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAgICBpbnQz
Ml90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdy
YXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKCksIG5vZGVJbmRleCk7IH0KKyAg
ICBkb3VibGUgdmFsdWVPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0
dXJuIGdyYXBoKCkudmFsdWVPZkRvdWJsZUNvbnN0YW50KGNvZGVCbG9jaygpLCBub2RlSW5kZXgp
OyB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5hbWljLCBkZWJ1Zy1v
bmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KICNpZiBERkdfSklUX0FTU0VSVApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0
LDkgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMTk1
LDE0ICsxOTgsMTUgQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5IAog
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICA9IDB4MDQ7CiBzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RG91YmxlID0gMHgwODsKIHN0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3ROdW1iZXIgPSAweDBjOwotc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgRHluYW1pY1ByZWRpY3Rpb25UYWcgPSAweDgwOworc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdFRvcCAgICA9IDB4MGY7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBT
dHJvbmdQcmVkaWN0aW9uVGFnID0gMHg4MDsKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3Rpb25UYWdNYXNrICAgID0gMHg4MDsKIAotZW51bSBQcmVkaWN0aW9uU291cmNlIHsgU3Rh
dGljUHJlZGljdGlvbiwgRHluYW1pY1ByZWRpY3Rpb24gfTsKK2VudW0gUHJlZGljdGlvblNvdXJj
ZSB7IFdlYWtQcmVkaWN0aW9uLCBTdHJvbmdQcmVkaWN0aW9uIH07CiAKIGlubGluZSBib29sIGlz
Q2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKHZhbHVl
ICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYmICEodmFsdWUgJiB+UHJlZGljdEFycmF5
KTsKKyAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYmICEo
dmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7CiB9CiAKIGlubGlu
ZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCkBAIC0yMjIsNjAg
KzIyNiwxMDcgQEAgaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3RlZAogCiBp
bmxpbmUgYm9vbCBpc051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZhbHVlICYgflByZWRpY3RO
dW1iZXIpOworICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1iZXIpICYmICEodmFsdWUg
JiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwogfQogCi1pbmxpbmUgYm9v
bCBpc0R5bmFtaWNQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCitpbmxpbmUgYm9vbCBp
c1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFs
dWUgIT0gKFByZWRpY3ROb25lIHwgRHluYW1pY1ByZWRpY3Rpb25UYWcpKTsKLSAgICByZXR1cm4g
ISEodmFsdWUgJiBEeW5hbWljUHJlZGljdGlvblRhZyk7CisgICAgQVNTRVJUKHZhbHVlICE9IChQ
cmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpKTsKKyAgICByZXR1cm4gISEodmFsdWUg
JiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKIH0KIAorI2lmbmRlZiBOREVCVUcKK2lubGluZSBjb25z
dCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICBp
ZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZhbHVlKSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlICYg
flByZWRpY3Rpb25UYWdNYXNrKSB7CisgICAgICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAg
ICAgICByZXR1cm4gInAtc3Ryb25nLWJvdHRvbSI7CisgICAgICAgIGNhc2UgUHJlZGljdENlbGw6
CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWNlbGwiOworICAgICAgICBjYXNlIFByZWRp
Y3RBcnJheToKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYXJyYXkiOworICAgICAgICBj
YXNlIFByZWRpY3RJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctaW50MzIiOwor
ICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LW51bWJlciI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LXRvcCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2Ug
UHJlZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRvbSI7CisgICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7CisgICAgY2FzZSBQcmVk
aWN0QXJyYXk6CisgICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKKyAgICBjYXNlIFByZWRp
Y3RJbnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOworICAgIGNhc2UgUHJlZGlj
dE51bWJlcjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstbnVtYmVyIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gInAtd2Vhay10b3AiOworICAgIH0KK30KKyNlbmRpZgorCiBpbmxpbmUg
UHJlZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGlj
dGVkVHlwZSByaWdodCkKIHsKLSAgICBpZiAoaXNEeW5hbWljUHJlZGljdGlvbihsZWZ0KSA9PSBp
c0R5bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSkKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxl
ZnQpID09IGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpCiAgICAgICAgIHJldHVybiBsZWZ0IHwg
cmlnaHQ7Ci0gICAgaWYgKGlzRHluYW1pY1ByZWRpY3Rpb24obGVmdCkpIHsKLSAgICAgICAgQVNT
RVJUKCFpc0R5bmFtaWNQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgaWYgKGlzU3Ryb25nUHJlZGlj
dGlvbihsZWZ0KSkgeworICAgICAgICBBU1NFUlQoIWlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkp
OwogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9Ci0gICAgQVNTRVJUKCFpc0R5bmFtaWNQcmVk
aWN0aW9uKGxlZnQpKTsKLSAgICBBU1NFUlQoaXNEeW5hbWljUHJlZGljdGlvbihyaWdodCkpOwor
ICAgIEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKKyAgICBBU1NFUlQoaXNTdHJv
bmdQcmVkaWN0aW9uKHJpZ2h0KSk7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCitpbmxpbmUgYm9vbCBtZXJnZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGlj
dGVkVHlwZSByaWdodCkKIHsKLSAgICBsZWZ0ID0gc3RhdGljX2Nhc3Q8VD4obWVyZ2VQcmVkaWN0
aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KSwgcmlnaHQpKTsKKyAgICBQcmVk
aWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBzdGF0aWNfY2FzdDxUPihtZXJnZVByZWRpY3Rpb25z
KHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpLCByaWdodCkpOworICAgIGJvb2wgcmVz
dWx0ID0gbmV3UHJlZGljdGlvbiAhPSBzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KTsK
KyAgICBsZWZ0ID0gbmV3UHJlZGljdGlvbjsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBpbmxp
bmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHR5cGUsIFByZWRp
Y3Rpb25Tb3VyY2Ugc291cmNlKQogewotICAgIEFTU0VSVCghKHR5cGUgJiBEeW5hbWljUHJlZGlj
dGlvblRhZykpOwotICAgIEFTU0VSVChzb3VyY2UgPT0gRHluYW1pY1ByZWRpY3Rpb24gfHwgc291
cmNlID09IFN0YXRpY1ByZWRpY3Rpb24pOworICAgIEFTU0VSVCghKHR5cGUgJiBTdHJvbmdQcmVk
aWN0aW9uVGFnKSk7CisgICAgQVNTRVJUKHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uIHx8IHNv
dXJjZSA9PSBXZWFrUHJlZGljdGlvbik7CiAgICAgaWYgKHR5cGUgPT0gUHJlZGljdE5vbmUpCiAg
ICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICByZXR1cm4gdHlwZSB8IChzb3VyY2UgPT0g
RHluYW1pY1ByZWRpY3Rpb24gPyBEeW5hbWljUHJlZGljdGlvblRhZyA6IDApOworICAgIHJldHVy
biB0eXBlIHwgKHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uID8gU3Ryb25nUHJlZGljdGlvblRh
ZyA6IDApOwogfQogCi0jaWZuZGVmIE5ERUJVRwotaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rp
b25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBlIHZhbHVlKQorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxF
UikKK2lubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgY29uc3QgVmFsdWVQcm9maWxlJiBwcm9maWxlKQogewotICAgIHN3aXRjaCAodmFs
dWUpIHsKLSAgICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICByZXR1cm4gInAtYm90dG9tIjsK
LSAgICBjYXNlIFByZWRpY3RDZWxsOgotICAgICAgICByZXR1cm4gInAtY2VsbCI7Ci0gICAgY2Fz
ZSBQcmVkaWN0QXJyYXk6Ci0gICAgICAgIHJldHVybiAicC1hcnJheSI7Ci0gICAgY2FzZSBQcmVk
aWN0SW50MzI6Ci0gICAgICAgIHJldHVybiAicC1pbnQzMiI7Ci0gICAgY2FzZSBQcmVkaWN0TnVt
YmVyOgotICAgICAgICByZXR1cm4gInAtbnVtYmVyIjsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gInAtdG9wIjsKLSAgICB9CisgICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRp
c3RpY3M7CisgICAgcHJvZmlsZS5jb21wdXRlU3RhdGlzdGljcyhnbG9iYWxEYXRhLCBzdGF0aXN0
aWNzKTsKKyAgICAKKyAgICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJu
IFByZWRpY3ROb25lOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmludDMycyA9PSBzdGF0aXN0
aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGlj
dEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5z
YW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3REb3Vi
bGU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3RhdGlzdGljcy5kb3VibGVz
ID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25U
YWcgfCBQcmVkaWN0TnVtYmVyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmFycmF5cyA9PSBz
dGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwg
UHJlZGljdEFycmF5OworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3Rp
Y3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0
Q2VsbDsKKyAgICAKKyAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7
CiB9CiAjZW5kaWYKIApAQCAtMzU2LDYgKzQwNywzMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IEFTU0VSVChpc0NvbnN0YW50KCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm87CiAgICAgfQor
ICAgIAorICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgeworICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnROdW1iZXIoKSkuZ2V0KCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2spLmlzSW50MzIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50
KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQo
KSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmlzTnVtYmVyKCk7CisgICAgfQorICAg
IAorICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9jaykpOworICAg
ICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5hc0ludDMyKCk7CisgICAg
fQorCisgICAgZG91YmxlIHZhbHVlT2ZEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaykpOwor
ICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS51bmNoZWNrZWRHZXRO
dW1iZXIoKTsKKyAgICB9CiAKICAgICBib29sIGhhc0xvY2FsKCkKICAgICB7CkBAIC00NzAsMjQg
KzU0OCwyNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcmVk
aWN0ZWRUeXBlPihtX29wSW5mbzIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZWRpY3QoUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICBib29s
IHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJj
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNQcmVkaWN0aW9uKCkpOwogICAgICAgICAKICAg
ICAgICAgLy8gV2UgaGF2ZSBwcmV2aW91c2x5IGZvdW5kIGVtcGlyaWNhbGx5IHRoYXQgYXNjcmli
aW5nIHN0YXRpYyBwcmVkaWN0aW9ucwogICAgICAgICAvLyB0byBoZWFwIGxvYWRzIGFzIHdlbGwg
YXMgY2FsbHMgaXMgbm90IHByb2ZpdGFibGUsIGFzIHRoZXNlIHByZWRpY3Rpb25zCiAgICAgICAg
IC8vIGFyZSB3cm9uZyB0b28gb2Z0ZW4uIEhlbmNlLCB0aGlzIGNvbXBsZXRlbHkgaWdub3JlcyBz
dGF0aWMgcHJlZGljdGlvbnMuCi0gICAgICAgIGlmIChzb3VyY2UgPT0gU3RhdGljUHJlZGljdGlv
bikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHNvdXJjZSA9PSBXZWFrUHJlZGlj
dGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGlmIChw
cmVkaWN0aW9uID09IFByZWRpY3ROb25lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgQVNTRVJUKHNvdXJjZSA9PSBEeW5h
bWljUHJlZGljdGlvbik7CisgICAgICAgIEFTU0VSVChzb3VyY2UgPT0gU3Ryb25nUHJlZGljdGlv
bik7CiAgICAgICAgIAotICAgICAgICBtX29wSW5mbzIgfD0gRHluYW1pY1ByZWRpY3Rpb25UYWcg
fCBwcmVkaWN0aW9uOworICAgICAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBTdHJv
bmdQcmVkaWN0aW9uVGFnIHwgcHJlZGljdGlvbjsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX29w
SW5mbzIgIT0gbmV3UHJlZGljdGlvbjsKKyAgICAgICAgbV9vcEluZm8yIHw9IG5ld1ByZWRpY3Rp
b247CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR1Byb3BhZ2F0b3IuaCIKKworI2lmIEVOQUJMRShERkdfSklUKSAmJiBFTkFCTEUoRFlOQU1J
Q19PUFRJTUlaQVRJT04pCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByb3BhZ2F0b3IgeworcHVibGljOgorICAgIFBy
b3BhZ2F0b3IoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2spCisgICAgICAgIDogbV9ncmFw
aChncmFwaCkKKyAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVk
QmxvY2spCisgICAgeworICAgICAgICBtX3ByZWRpY3Rpb25zLnJlc2l6ZShtX2dyYXBoLnNpemUo
KSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0Tm9uZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaXhwb2ludCgpCisgICAgeworI2lmIERGR19ERUJVR19WRVJCT1NFCisg
ICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8v
IEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2Fs
bHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2RlLgorICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Cisg
ICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUg
bGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAgICAgIC8vIGNh
dXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFj
a3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6
ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAgICAvLyBm
b3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxv
dy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRl
QmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEbyBhbm90aGVyIGZvcndhcmQg
cGFzcyBiZWNhdXNlIGZvcndhcmQgcGFzc2VzIGFyZSBvbiBhdmVyYWdlIG1vcmUKKyAgICAgICAg
ICAgIC8vIHByb2ZpdGFibGUuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBp
bGVJbmRleF0gPT0gcHJlZGljdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdID0gcHJlZGljdGlvbjsKKyAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZVByZWRpY3Rp
b24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKERGRzo6bWVy
Z2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdLCBwcmVkaWN0aW9uKSkK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJv
cGFnYXRlTm9kZShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBOb2RlVHlw
ZSBvcCA9IG5vZGUub3A7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBKU0Nv
bnN0YW50OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS52YWx1ZU9mSlNDb25z
dGFudChtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBT
dHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgp
KQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERv
dWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXND
ZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZtX2dsb2JhbERhdGEsIGNlbGwpKQorICAg
ICAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RBcnJh
eSwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgU3Ryb25n
UHJlZGljdGlvbikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2V0UHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
R2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fZ3Jh
cGguZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpOworICAgICAgICAgICAgaWYgKGlzU3Ryb25n
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24o
cHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBtX2dy
YXBoLnByZWRpY3Qobm9kZS5sb2NhbCgpLCBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldICYg
flByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDoKKyAg
ICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Cisg
ICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVUb051bWJl
cjogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9wcmVkaWN0aW9u
c1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzU3Ryb25n
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIGlmIChpc051bWJlclBy
ZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlv
bihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVtYmVyLCBTdHJvbmdQcmVk
aWN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIFByZWRp
Y3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVy
UHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQs
IHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtl
UHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihtYWtlUHJl
ZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6
IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5j
aGlsZDEoKV07CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9u
c1tub2RlLmNoaWxkMigpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlzU3Ryb25n
UHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmln
aHQpKSkKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRp
Y3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aERpdjog
eworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91Ymxl
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBDb21wYXJl
TGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVH
cmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29t
cGFyZUVxOgorICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgY2FzZSBJbnN0
YW5jZU9mOiB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNhZCwgYXMgd2UgZG9uJ3QgaGF2ZSBh
IGJvb2xlYW4gcHJlZGljdGlvbiwgZXZlbiB0aG91Z2ggd2UgZWFzaWx5CisgICAgICAgICAgICAv
LyBjb3VsZC4KKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dFRvcCwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0
aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAg
IGNhc2UgQ29uc3RydWN0OiB7CisgICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKG5v
ZGUuZ2V0UHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG5vZGUu
Z2V0UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgU3Ryb25nUHJlZGljdGlvbikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdl
dEdsb2JhbFZhcjogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9n
cmFwaC5nZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVyKCkpOworICAgICAgICAg
ICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICBt
ZXJnZVByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CisgICAgICAgICAg
ICBtX2NoYW5nZWQgfD0gbV9ncmFwaC5wcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCks
IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9u
Z1ByZWRpY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0
aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBjYXNlIERGRzo6SnVtcDoKKyAgICAgICAg
Y2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIFB1dEJ5SWQ6
CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBDaGVja0hhc0luc3Rh
bmNlOgorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBwcm9m
aWxpbmcgZm9yIHRoZW0sIHlldC4KKyAgICAgICAgY2FzZSBSZXNvbHZlOgorICAgICAgICBjYXNl
IFJlc29sdmVCYXNlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQorICAgIHsKKyNpZiBERkdfREVCVUdf
VkVSQk9TRQorICAgICAgICBwcmludGYoIlByb3BhZ2F0aW5nIGZvcndhcmQgWyV1XVxuIiwgKytt
X2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gMDsgbV9jb21w
aWxlSW5kZXggPCBtX2dyYXBoLnNpemUoKTsgKyttX2NvbXBpbGVJbmRleCkKKyAgICAgICAgICAg
IHByb3BhZ2F0ZU5vZGUobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHByb3BhZ2F0ZUJhY2t3YXJkKCkKKyAgICB7CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQp
OworI2VuZGlmCisgICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsg
bV9jb21waWxlSW5kZXgtLSA+IDA7KQorICAgICAgICAgICAgcHJvcGFnYXRlTm9kZShtX2dyYXBo
W21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworICAg
IEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CisgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgCisgICAgTm9kZUluZGV4IG1f
Y29tcGlsZUluZGV4OworICAgIAorICAgIFZlY3RvcjxQcmVkaWN0ZWRUeXBlLCAxNj4gbV9wcmVk
aWN0aW9uczsKKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgdW5zaWduZWQgbV9jb3VudDsK
KyNlbmRpZgorICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKwordm9pZCBwcm9wYWdhdGUo
R3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBBU1NFUlQocHJvZmlsZWRCbG9j
ayk7CisgICAgCisgICAgUHJvcGFnYXRvciBwcm9wYWdhdG9yKGdyYXBoLCAqZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLCBwcm9maWxlZEJsb2NrKTsKKyAgICBwcm9wYWdhdG9yLmZpeHBvaW50KCk7Cisg
ICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICBncmFwaC5kdW1wKGNvZGVCbG9jayk7Cisj
ZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpICYmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR1Byb3BhZ2F0b3JfaAorI2RlZmluZSBERkdQcm9wYWdhdG9yX2gKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVz
cGFjZSBERkcgeworCisvLyBQcm9wYWdhdGUgZHluYW1pYyBwcmVkaWN0aW9ucyBmcm9tIHZhbHVl
IHNvdXJjZXMgdG8gdmFyaWFibGVzLgorI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikK
K3ZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2NrKik7CisjZWxz
ZQoraW5saW5lIHZvaWQgcHJvcGFnYXRlKEdyYXBoJiwgSlNHbG9iYWxEYXRhKiwgQ29kZUJsb2Nr
KikgeyB9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZp
c2lvbiA5NDU1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsOSBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0
YXRlKiBleGVjLCBDYWxsTGluCiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2Vk
KCkpOwogICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgp
LT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlu
a0luY29taW5nQ2FsbCgmY2FsbExpbmtJbmZvKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRs
ZUhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVI
ZWFwLmgJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFu
ZGxlSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNiArMjE4LDggQEAgaW5saW5lIEhhbmRs
ZUhlYXA6Ok5vZGU6Ok5vZGUoSGFuZGxlSGVhcAogICAgIDogbV9oYW5kbGVIZWFwKGhhbmRsZUhl
YXApCiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0KDApCisg
ICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkBAIC0yMjUsNiArMjI3LDgg
QEAgaW5saW5lIEhhbmRsZUhlYXA6Ok5vZGU6Ok5vZGUoV1RGOjpTZW50aQogICAgIDogbV9oYW5k
bGVIZWFwKDApCiAgICAgLCBtX3dlYWtPd25lcigwKQogICAgICwgbV93ZWFrT3duZXJDb250ZXh0
KDApCisgICAgLCBtX3ByZXYoMCkKKyAgICAsIG1fbmV4dCgwKQogewogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDU1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTYgQEAgSklU
OjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgogewogfQogCisjaWYgRU5BQkxF
KFRJRVJFRF9DT01QSUxBVElPTikKK3ZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0
aW1pemF0aW9uQ2hlY2tLaW5kIGtpbmQpCit7CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFu
Y2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVj
ayA/IDEgOiAzMCksIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPm1fZXhlY3V0ZUNvdW50
ZXIpKTsKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBraW5kID09IExvb3BPcHRpbWl6
YXRpb25DaGVjayA/IGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3AgOiBjdGlfb3B0aW1pemVfZnJvbV9y
ZXQpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsK
K30KKyNlbmRpZgorCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHZvaWQgSklUOjplbWl0VGltZW91
dENoZWNrKCkKIHsKQEAgLTEwMiw2ICsxMTIsOCBAQCB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVj
aygpCiAgICAgc3R1YkNhbGwuY2FsbCh0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CiAgICAgc3R1YkNh
bGwuZ2V0QXJndW1lbnQoMCwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVsb2FkIGxhc3QgcmVzdWx0IHJl
Z2lzdGVycy4KICAgICBza2lwVGltZW91dC5saW5rKHRoaXMpOworICAgIAorICAgIGVtaXRPcHRp
bWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2Vsc2UKIHZvaWQgSklU
OjplbWl0VGltZW91dENoZWNrKCkKQEAgLTExMSw2ICsxMjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFRp
bWVvdXRDaGVjaygpCiAgICAgc2tpcFRpbWVvdXQubGluayh0aGlzKTsKIAogICAgIGtpbGxMYXN0
UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9w
dGltaXphdGlvbkNoZWNrKTsKIH0KICNlbmRpZgogCkBAIC02MjMsNyArNjM3LDcgQEAgSklUQ29k
ZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogCiAgICAgaWYgKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykK
ICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
Zihhcml0eUNoZWNrKTsKLQorICAgIAogICAgIHJldHVybiBKSVRDb2RlKHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZSgpLCBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiB9CiAKQEAgLTYzNyw2ICs2NTEs
OSBAQCB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvCiAgICAgICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5j
YWxsZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVy
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIsIGNvZGUpOworICAgICAgICAK
KyAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgICAgIGNhbGxlZUNvZGVCbG9j
ay0+bGlua0luY29taW5nQ2FsbChjYWxsTGlua0luZm8pOwogICAgIH0KIAogICAgIC8vIHBhdGNo
IHRoZSBjYWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNiArOTcyLDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAvLyBMb2FkcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIGEgc2lu
Z2xlIGNoYXJhY3RlciBzdHJpbmcgaW50byBkc3QuCiAgICAgICAgIHZvaWQgZW1pdExvYWRDaGFy
YWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFp
bHVyZXMpOwogICAgICAgICAKKyAgICAgICAgZW51bSBPcHRpbWl6YXRpb25DaGVja0tpbmQgeyBM
b29wT3B0aW1pemF0aW9uQ2hlY2ssIFJldE9wdGltaXphdGlvbkNoZWNrIH07CisjaWYgRU5BQkxF
KFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgdm9pZCBlbWl0T3B0aW1pemF0aW9uQ2hlY2so
T3B0aW1pemF0aW9uQ2hlY2tLaW5kKTsKKyNlbHNlCisgICAgICAgIHZvaWQgZW1pdE9wdGltaXph
dGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2luZCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAg
ICAgICAgIHZvaWQgZW1pdFRpbWVvdXRDaGVjaygpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAg
dm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNy
YzIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
cmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsOCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFZhcmFyZ3NTbG93Q2FzZShJCiAKIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhS
ZXRPcHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAogICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKQEAgLTExOCw2ICsxMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24q
IGN1cnJlCiAKIHZvaWQgSklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRP
cHRpbWl6YXRpb25DaGVjayk7CisgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCB0aGlzUmVnID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIzICsyNyw1MCBAQAogI2RlZmluZSBKSVRDb2Rl
X2gKIAogI2lmIEVOQUJMRShKSVQpCi0KICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVk
ZSAiUHJvZmlsZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVOQUJMRShK
SVQpCiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZTsKKyNl
bmRpZgogICAgIAogICAgIGNsYXNzIEpJVENvZGUgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgICAgIHR5cGVkZWYg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CisjZWxzZQorICAgICAgICBKSVRDb2RlKCkg
eyB9CisjZW5kaWYKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gSklUVHlwZSB7IEhvc3RDYWxs
VGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQgfTsKLQorICAgICAgICAKKyAgICAgICAgc3RhdGlj
IEpJVFR5cGUgYm90dG9tVGllckpJVCgpCisgICAgICAgIHsKKyNpZiBFTkFCTEUoVElFUkVEX0NP
TVBJTEFUSU9OKQorICAgICAgICAgICAgcmV0dXJuIEJhc2VsaW5lSklUOworI2Vsc2UKKyAgICAg
ICAgICAgIHJldHVybiBERkdKSVQ7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIEpJVFR5cGUgdG9wVGllckpJVCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKSVRUeXBl
IG5leHRUaWVySklUKEpJVFR5cGUgaml0VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChqaXRUeXBlLCBqaXRUeXBlID09IEJhc2VsaW5lSklUIHx8IGppdFR5cGUgPT0g
REZHSklUKTsKKyAgICAgICAgICAgIHJldHVybiBERkdKSVQ7CisgICAgICAgIH0KKyAgICAgICAg
CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgSklUQ29kZSgpCiAgICAgICAgIHsKICAgICAgICAg
fQpAQCAtNTMsNyArODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICwgbV9qaXRU
eXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBi
b29sIG9wZXJhdG9yICEoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gIW1f
cmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTI0LDEwICsxNTEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBDb2RlUmVmIG1fcmVmOwogICAgICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIH07CiAKIH07CiAKICNlbmRpZgot
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
cmV2aXNpb24gOTQ1NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiArNDUyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dGVhcl9vZmZfYXJndW1lbnRzKElucwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soUmV0
T3B0aW1pemF0aW9uQ2hlY2spOworICAgIAogICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3RlciAh
PSByZWdUMSk7CiAgICAgQVNTRVJUKHJlZ1QxICE9IHJldHVyblZhbHVlUmVnaXN0ZXIpOwogICAg
IEFTU0VSVChyZXR1cm5WYWx1ZVJlZ2lzdGVyICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTQ3
Miw2ICs0NzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAK
IHZvaWQgSklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhSZXRPcHRpbWl6YXRp
b25DaGVjayk7CisgICAgCiAgICAgQVNTRVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsK
ICAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAgICAgQVNTRVJUKHJl
dHVyblZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTYsNiAr
MTgxNiwzMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9jaGVja19oYXNfCiAgICAg
Vk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwogfQogCitERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcHRpbWl6ZV9mcm9tX2xvb3ApCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOworICAgIAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNo
YWluKCk7CisKKyAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6
ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWls
ZWQuXG4iKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbV9y
ZXQpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIAorICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisKKyAgICBKU09iamVj
dCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNo
YWluKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzog
b3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gcmV0IGZhaWxlZC5cbiIpOworfQorCiBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfaW5zdGFuY2VvZikKIHsKICAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NDU1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIzLDYgKzQyMyw4IEBAIGV4dGVybiAi
QyIgewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hcmd1
bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90
aHJvd19yZWZlcmVuY2VfZXJyb3IoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAg
ICB2b2lkIEpJVF9TVFVCIGN0aV9vcHRpbWl6ZV9mcm9tX3JldChTVFVCX0FSR1NfREVDTEFSQVRJ
T04pOwogICAgIHZvaWQqIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2soU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X2FyaXR5
Q2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3Bf
Y2FsbF9qaXRDb21waWxlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTQ1NTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNjYgKzI4LDE2IEBACiAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1
ZGUgIkpJVC5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlVTdHJpbmdCdWlsZGVy
LmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSNpbmNsdWRl
ICJERkdCeXRlQ29kZVBhcnNlci5oIgotI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCi0jZW5k
aWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBFeGVjdXRhYmxlQmFzZTo6
c19pbmZvID0geyAiRXhlY3V0YWJsZSIsIDAsIDAsIDAgfTsKIAotI2lmIEVOQUJMRShKSVQpCi0j
aWYgRU5BQkxFKERGR19KSVQpCi1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlKEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUpCi17Ci0jaWYgRU5B
QkxFKERGR19KSVRfUkVTVFJJQ1RJT05TKQotICAgIC8vIEZJWE1FOiBObyBmbG93IGNvbnRyb2wg
eWV0IHN1cHBvcnRlZCwgZG9uJ3QgYm90aGVyIHNjYW5uaW5nIHRoZSBieXRlY29kZSBpZiB0aGVy
ZSBhcmUgYW55IGp1bXAgdGFyZ2V0cy4KLSAgICBpZiAoY29kZUJsb2NrLT5udW1iZXJPZkp1bXBU
YXJnZXRzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VF9SRVNUUklDVElPTlMpCi0KLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgIERGRzo6R3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7Ci0gICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERh
dGEsIGNvZGVCbG9jaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERGRzo6SklUQ29t
cGlsZXIgZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwotICAgIGRhdGFG
bG93SklULmNvbXBpbGUoaml0Q29kZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBi
b29sIHRyeURGR0NvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2Fs
bGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKLXsKLSNpZiBFTkFCTEUo
REZHX0pJVF9SRVNUUklDVElPTlMpCi0gICAgLy8gRklYTUU6IE5vIGZsb3cgY29udHJvbCB5ZXQg
c3VwcG9ydGVkLCBkb24ndCBib3RoZXIgc2Nhbm5pbmcgdGhlIGJ5dGVjb2RlIGlmIHRoZXJlIGFy
ZSBhbnkganVtcCB0YXJnZXRzLgotICAgIGlmIChjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdl
dHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUX1JF
U1RSSUNUSU9OUykKLQotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgREZHOjpHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMs
IGNvZGVCbG9jay0+bV9udW1WYXJzKTsKLSAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNhbGxlZUFyZ3NF
eGVjKQotICAgICAgICBkZmcucHJlZGljdEFyZ3VtZW50VHlwZXMoY2FsbGVlQXJnc0V4ZWMpOwot
Ci0gICAgREZHOjpKSVRDb21waWxlciBkYXRhRmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVC
bG9jayk7Ci0gICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKGppdENvZGUsIGppdENvZGVX
aXRoQXJpdHlDaGVjayk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZWxzZSAvLyBFTkFCTEUoREZH
X0pJVCkKLXN0YXRpYyBib29sIHRyeURGR0NvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwg
SklUQ29kZSYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1zdGF0aWMgYm9vbCB0cnlERkdDb21waWxlRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgSklUQ29kZSYsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKIHZvaWQgRXhlY3V0YWJsZUJhc2U6
OmNsZWFyQ29kZSgpCiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE2Niw4ICsxMTYsMTggQEAgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoRQogewogfQogCitKU09iamVjdCog
RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOwor
ICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fZXZhbENvZGVCbG9jay0+Z2V0SklU
VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxl
SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZh
bENvZGVCbG9jay0+Z2V0SklUVHlwZSgpKSk7CisgICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2Nr
KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29t
cGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5O
b2RlKQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6OkpJVFR5cGUg
aml0VHlwZSkKIHsKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTgzLDI2ICsxNDMsNDEg
QEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0
KCk7CiAKLSAgICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgbV9ldmFsQ29kZUJsb2Nr
ID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2Uo
KS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpKSk7Ci0gICAgT3duUHRy
PEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJh
dG9yKGV2YWxOb2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1i
b2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9j
az4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFT
U0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0Nv
ZGVCbG9jayk7CisgICAgbV9ldmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxv
Y2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9k
ZS0+bG9jYWxEZXB0aCgpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25Q
dHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5l
cmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5
bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkgPyBCeXRlY29kZUdlbmVyYXRvcjo6T3B0aW1pemluZ0NvbXBpbGF0aW9uIDog
Qnl0ZWNvZGVHZW5lcmF0b3I6OkZpcnN0Q29tcGlsYXRpb24pKSk7CiAgICAgaWYgKChleGNlcHRp
b24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jay5j
bGVhcigpOworICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2
YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAg
ICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsK
ICAgICB9CiAKICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICBtX2V2YWxDb2RlQmxv
Y2stPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlm
IChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21w
aWxlZCA9IHRyeURGR0NvbXBpbGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBtX2ppdENv
ZGVGb3JDYWxsKTsKLSAgICAgICAgaWYgKCFkZmdDb21waWxlZCkKKyAgICAgICAgYm9vbCBkZmdD
b21waWxlZCA9IGZhbHNlOworICAgICAgICBpZiAoaml0VHlwZSA9PSBKSVRDb2RlOjpERkdKSVQp
CisgICAgICAgICAgICBkZmdDb21waWxlZCA9IERGRzo6dHJ5Q29tcGlsZShleGVjLCBtX2V2YWxD
b2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwpOworICAgICAgICBpZiAoZGZnQ29tcGls
ZWQpCisgICAgICAgICAgICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSB8
fCAhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5oYXNJbmNvbWluZ0NhbGxzKCkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0
aXZlIHBpZWNlIG9mIGNvZGUgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudAorICAgICAgICAgICAg
ICAgIC8vIEpJVCwgc28gd2UgY2FuIHNpbGVudGx5IGZhaWwuCisgICAgICAgICAgICAgICAgbV9l
dmFsQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxD
b2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2V2YWxD
b2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklU
Ojpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0
KCkpOworICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlm
ICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAg
bV9ldmFsQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICBtX2V2
YWxDb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC0yNjEsMTAgKzIzNiwxOSBAQCBKU09iamVj
dCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsK
IH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCogUHJv
Z3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgQVNTRVJUKCFtX3Byb2dyYW1Db2RlQmxv
Y2spOworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7
CisgICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBKU09iamVjdCogZXJyb3Ig
PSAwOworICAgIGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2Rl
Ojp0b3BUaWVySklUKCkpCisgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNj
b3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmdl
dEpJVFR5cGUoKSkpOworICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgcmV0
dXJuIGVycm9yOworfQogCitKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
cm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklU
Q29kZTo6SklUVHlwZSBqaXRUeXBlKQorewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CkBAIC0yNzcsMjUgKzI2MSw0MCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFi
bGU6OmNvbXBpbGVJbnRlCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2Nv
cGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICAKLSAgICBtX3Byb2dyYW1Db2Rl
QmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBn
bG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVH
ZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3Jh
bU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgp
LCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpKSk7CisgICAgT3duUHRyPENvZGVCbG9jaz4gcHJl
dmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2sucmVsZWFzZSgpOworICAgIEFTU0VS
VCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVC
bG9jayk7CisgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1Db2Rl
QmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigp
LCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5v
ZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBt
X3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksICEhbV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpID8gQnl0ZWNvZGVHZW5lcmF0b3I6Ok9wdGltaXppbmdDb21waWxhdGlvbiA6IEJ5dGVjb2Rl
R2VuZXJhdG9yOjpGaXJzdENvbXBpbGF0aW9uKSkpOwogICAgIGlmICgoZXhjZXB0aW9uID0gZ2Vu
ZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIo
KTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9n
cmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
ICAgICAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CiAgICAgICAgIHJldHVybiBleGNl
cHRpb247CiAgICAgfQogCiAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgbV9w
cm9ncmFtQ29kZUJsb2NrLT5jb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAg
IGJvb2wgZGZnQ29tcGlsZWQgPSB0cnlERkdDb21waWxlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9j
ay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGlmICghZGZnQ29tcGlsZWQpCisg
ICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGppdFR5cGUgPT0g
SklUQ29kZTo6REZHSklUKQorICAgICAgICAgICAgZGZnQ29tcGlsZWQgPSBERkc6OnRyeUNvbXBp
bGUoZXhlYywgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsKTsKKyAg
ICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkgeworICAg
ICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJv
Z3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7
CisgICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1l
U29vbigpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xv
YmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgfQogI2lmICFFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1w
c0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+ZGlzY2Fy
ZEJ5dGVjb2RlKCk7CiAjZW5kaWYKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5zZXRKSVRD
b2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CiAj
ZW5kaWYKIApAQCAtMzQyLDcgKzM0MSwyOSBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVh
ckNvZGUoKQogICAgIEJhc2U6OmNsZWFyQ29kZSgpOwogfQogCi1KU09iamVjdCogRnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQorSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2Fs
bGVlQXJnc0V4ZWMpCit7CisgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xv
YmFsT2JqZWN0KTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IDA7CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUVHlwZSgp
ICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2Fs
bEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6
bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NF
UlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIHJldHVybiBlcnJvcjsKK30KKworSlNPYmpl
Y3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVj
U3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK3sKKyAgICBBU1NF
UlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIEFTU0VSVCgh
IW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBKU09iamVjdCogZXJyb3IgPSAwOworICAg
IGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OnRv
cFRpZXJKSVQoKSkKKyAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwo
ZXhlYywgc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5nZXRKSVRUeXBlKCkpKTsKKyAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCk7CisgICAgcmV0dXJuIGVycm9yOworfQorCitKU09iamVjdCogRnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2Rl
OjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CkBA
IC0zNTgsMTEgKzM3OSwxMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUt
Pmdsb2JhbE9iamVjdC5nZXQoKTsKIAotICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JDYWxsKTsK
LSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2so
dGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNv
dXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJh
dG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCks
IHNjb3BlQ2hhaW5Ob2RlLCBtX2NvZGVCbG9ja0ZvckNhbGwtPnN5bWJvbFRhYmxlKCksIG1fY29k
ZUJsb2NrRm9yQ2FsbC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0Nv
ZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ2FsbC5yZWxlYXNlKCk7CisgICAgQVNTRVJUKChqaXRU
eXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsK
KyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2so
dGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNv
dXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGZhbHNlLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkp
KTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcg
Qnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCAhIW1fY29k
ZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6
aW5nQ29tcGlsYXRpb24gOiBCeXRlY29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsK
ICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAg
bV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2Fs
bC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwog
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTM3MywxNyArMzk1LDMxIEBAIEpT
T2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxl
ID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+
ZGVzdHJveURhdGEoKTsKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmNvcHlEYXRhRnJvbUFsdGVy
bmF0aXZlKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCku
Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IHRyeURGR0NvbXBpbGVG
dW5jdGlvbihleGVjLCBjYWxsZWVBcmdzRXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpLCBt
X2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAg
ICBpZiAoIWRmZ0NvbXBpbGVkKQorICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7Cisg
ICAgICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0Nv
bXBpbGVkID0gREZHOjp0cnlDb21waWxlRnVuY3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1f
Y29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2Fs
bFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CisgICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2tGb3JDYWxsLT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+
YWx0ZXJuYXRpdmUoKSkgeworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0
YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+
cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2Fs
bC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgICAgICAgICBtX3N5bWJvbFRh
YmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9y
Q2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxv
Y2tGb3JDYWxsLmdldCgpLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLQorICAg
ICAgICB9CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNv
ZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQogICAgICAgICAgICAgbV9jb2RlQmxv
Y2tGb3JDYWxsLT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgorICAgICAgICAKKyAgICAgICAg
bV9jb2RlQmxvY2tGb3JDYWxsLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
Y2FsbGVlQXJnc0V4ZWMpOwpAQCAtNDAzLDggKzQzOSwxMCBAQCBKU09iamVjdCogRnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4
ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKQog
eworICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKKyAgICAKICAgICBKU09iamVjdCogZXhjZXB0
aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+
Z2xvYmFsRGF0YTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERh
dGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUo
KSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKQEAgLTQxOSwx
MSArNDU3LDEyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKIAog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFs
T2JqZWN0LmdldCgpOwogCi0gICAgQVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0g
ICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxv
Y2sodGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCks
IHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHRydWUpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5l
cmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQo
KSwgc2NvcGVDaGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgp
LCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q29kZUJsb2Nr
PiBwcmV2aW91c0NvZGVCbG9jayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnJlbGVhc2UoKTsK
KyAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJl
dmlvdXNDb2RlQmxvY2spOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gYWRvcHRQdHIo
bmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBz
b3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCB0cnVlLCBwcmV2aW91
c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdl
bmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgc2NvcGVD
aGFpbk5vZGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJu
YXRpdmUoKSA/IEJ5dGVjb2RlR2VuZXJhdG9yOjpPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBCeXRl
Y29kZUdlbmVyYXRvcjo6Rmlyc3RDb21waWxhdGlvbikpKTsKICAgICBpZiAoKGV4Y2VwdGlvbiA9
IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QuY2xlYXIoKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+cmVs
ZWFzZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KQEAgLTQzNCwxNCArNDczLDMwIEBAIEpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBtX3N5bWJvbFRhYmxlID0gbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAKICAgICBib2R5LT5k
ZXN0cm95RGF0YSgpOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5jb3B5RGF0YUZyb21B
bHRlcm5hdGl2ZSgpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0
YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJVDo6
Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QuZ2V0KCksICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAg
IGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQgcG9z
c2libGUgdG8gY29tcGlsZSBjb25zdHJ1Y3RvcnMgd2l0aCBERkcuCisgICAgICAgIGlmIChkZmdD
b21waWxlZCkgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRl
cm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5hbHRl
cm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsKKyAg
ICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0
ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRv
bnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9qaXRDb2RlRm9y
Q29uc3RydWN0ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrKTsKKyAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAg
ICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKICAgICAgICAg
ICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5kaXNjYXJkQnl0ZWNvZGUoKTsKICNlbmRpZgor
ICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNldEpJVENvZGUobV9q
aXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7
CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsMTAgKzMwNiwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHlu
YW1pY0dsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAg
ICAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBj
b21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGVy
cm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0
b21UaWVySklUKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVC
bG9jayk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CiAKICAgICAgICAgRXZhbENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAg
ICAgICB7CkBAIC0zNDQsNyArMzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgRXZhbEV4ZWN1dGFi
bGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwogCi0gICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSos
IEpJVENvZGU6OkpJVFR5cGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYpOwogICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKQEAgLTM2OSwxMSAr
MzcxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2Jh
bERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJv
ciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAg
ICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAg
ICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09
ICEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAg
ICAgfQogCisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW5Ob2RlKik7CisKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0
ZWNvZGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2Nr
KTsKQEAgLTQwMyw3ICs0MDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNj
cmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJs
ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09i
amVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29k
ZTo6SklUVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CiAgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIApAQCAtNDUwLDExICs0NTQsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgp
LmR5bmFtaWNHbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsK
ICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDYWxsKQotICAgICAgICAgICAgICAgIGVy
cm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVl
QXJnc0V4ZWMpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNhbGxJbnRlcm5h
bChleGVjLCBzY29wZUNoYWluTm9kZSwgY2FsbGVlQXJnc0V4ZWMsIEpJVENvZGU6OmJvdHRvbVRp
ZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JD
YWxsKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogCisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9k
ZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsKKwogICAgICAgICBib29sIGlzR2Vu
ZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9ja0ZvckNhbGw7CkBAIC00NzEsMTEgKzQ3NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7
CiAgICAgICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwogICAgICAgICAgICAgaWYgKCFtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAg
ZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2NvcGVDaGFpbk5vZGUs
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWVycm9yID09
ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwog
ICAgICAgICB9CiAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1
Y3QoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKwogICAgICAgICBib29sIGlzR2VuZXJh
dGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0OwpAQCAtNTAxLDYgKzUwOSwyMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hh
aW5Ob2RlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVP
cHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gY29tcGlsZU9wdGltaXplZEZvciBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBhIGNhbGxm
cmFtZSBzZXQgdXAgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAgICAgLy8gc2luY2Ug
d2Ugd2lsbCBtYWtlIHNwZWN1bGF0aXZlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlIGFyZ3Vt
ZW50cy4KKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7CisgICAgICAgICAgICBB
U1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKKyAg
ICAgICAgICAgIEFTU0VSVChhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxl
KCkgPT0gdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVG
b3JDYWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChl
eGVjLCBzY29wZUNoYWluTm9kZSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9y
Q29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtNTQ5LDgg
KzU3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoSlNH
bG9iYWxEYXRhJiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYsIGJv
b2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBib29sKTsKICAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJh
bWV0ZXJzKiwgYm9vbCk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJu
YWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVj
KTsKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJ
bnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJn
c0V4ZWMsIEpJVENvZGU6OkpJVFR5cGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNv
bnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgSklUQ29kZTo6SklU
VHlwZSk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0
dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0NTUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NjAsOSArOTYwLDE3IEBACiAjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDEKICNlbmRpZgogCisj
aWYgIWRlZmluZWQoRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTikKKyNkZWZpbmUgRU5BQkxFX1RJ
RVJFRF9DT01QSUxBVElPTiAwCisjZW5kaWYKKwogLyogQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50
ZWQgZm9yIEpTVkFMVUU2NCwgb25seSB0ZXN0ZWQgb24gUExBVEZPUk0oTUFDKSAqLwotI2lmICFk
ZWZpbmVkKEVOQUJMRV9WQUxVRV9QUk9GSUxFUikgJiYgRU5BQkxFKEpJVCkgJiYgVVNFKEpTVkFM
VUU2NCkgJiYgUExBVEZPUk0oTUFDKQotI2RlZmluZSBFTkFCTEVfVkFMVUVfUFJPRklMRVIgMAor
I2lmICFkZWZpbmVkKEVOQUJMRV9WQUxVRV9QUk9GSUxFUikKKyNkZWZpbmUgRU5BQkxFX1ZBTFVF
X1BST0ZJTEVSIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04KKyNlbmRpZgorCisjaWYgIWRlZmlu
ZWQoRU5BQkxFX0RZTkFNSUNfT1BUSU1JWkFUSU9OKQorI2RlZmluZSBFTkFCTEVfRFlOQU1JQ19P
UFRJTUlaQVRJT04gRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTgogI2VuZGlmCiAKICNpZiAhZGVm
aW5lZChFTkFCTEVfVkVSQk9TRV9WQUxVRV9QUk9GSUxFKSAmJiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1NlbnRpbmVsTGlua2VkTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU2VudGluZWxMaW5rZWRM
aXN0LmgJKHJldmlzaW9uIDk0NTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TZW50
aW5lbExpbmtlZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjQgKzQxLDYzIEBAIG5hbWVz
cGFjZSBXVEYgewogCiBlbnVtIFNlbnRpbmVsVGFnIHsgU2VudGluZWwgfTsKIAotdGVtcGxhdGUg
PHR5cGVuYW1lIE5vZGU+IGNsYXNzIFNlbnRpbmVsTGlua2VkTGlzdCB7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY2xhc3MgQmFzaWNSYXdTZW50aW5lbE5vZGUgewogcHVibGljOgotICAgIHR5cGVk
ZWYgTm9kZSogaXRlcmF0b3I7CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUoU2VudGluZWxUYWcp
CisgICAgICAgIDogbV9uZXh0KDApCisgICAgICAgICwgbV9wcmV2KDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBCYXNpY1Jhd1NlbnRpbmVsTm9kZSgpCisgICAgICAgIDogbV9uZXh0KDApCisg
ICAgICAgICwgbV9wcmV2KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFByZXYo
QmFzaWNSYXdTZW50aW5lbE5vZGUqIHByZXYpIHsgbV9wcmV2ID0gcHJldjsgfQorICAgIHZvaWQg
c2V0TmV4dChCYXNpY1Jhd1NlbnRpbmVsTm9kZSogbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9Cisg
ICAgCisgICAgVCogcHJldigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX3ByZXYpOyB9Cisg
ICAgVCogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX25leHQpOyB9CisgICAgCisg
ICAgYm9vbCBpc09uTGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoISFtX3ByZXYg
PT0gISFtX25leHQpOworICAgICAgICByZXR1cm4gISFtX3ByZXY7CisgICAgfQorICAgIAorICAg
IHZvaWQgcmVtb3ZlKCk7CisgICAgCitwcml2YXRlOgorICAgIEJhc2ljUmF3U2VudGluZWxOb2Rl
KiBtX25leHQ7CisgICAgQmFzaWNSYXdTZW50aW5lbE5vZGUqIG1fcHJldjsKK307CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlID0gVD4gY2xhc3MgU2VudGluZWxMaW5r
ZWRMaXN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFQqIGl0ZXJhdG9yOwogCiAgICAgU2VudGlu
ZWxMaW5rZWRMaXN0KCk7CiAKLSAgICB2b2lkIHB1c2goTm9kZSopOwotICAgIHN0YXRpYyB2b2lk
IHJlbW92ZShOb2RlKik7CisgICAgdm9pZCBwdXNoKFQqKTsKKyAgICBzdGF0aWMgdm9pZCByZW1v
dmUoVCopOwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKTsKICAgICBpdGVyYXRvciBlbmQoKTsKIAog
cHJpdmF0ZToKLSAgICBOb2RlIG1faGVhZFNlbnRpbmVsOwotICAgIE5vZGUgbV90YWlsU2VudGlu
ZWw7CisgICAgUmF3Tm9kZSBtX2hlYWRTZW50aW5lbDsKKyAgICBSYXdOb2RlIG1fdGFpbFNlbnRp
bmVsOwogfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSBTZW50aW5lbExpbmtl
ZExpc3Q8Tm9kZT46OlNlbnRpbmVsTGlua2VkTGlzdCgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
dm9pZCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxUPjo6cmVtb3ZlKCkKK3sKKyAgICBTZW50aW5lbExp
bmtlZExpc3Q8VCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8VD4gPjo6cmVtb3ZlKHN0YXRpY19jYXN0
PFQqPih0aGlzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2Rl
PiBpbmxpbmUgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjpTZW50aW5lbExpbmtlZExp
c3QoKQogICAgIDogbV9oZWFkU2VudGluZWwoU2VudGluZWwpCiAgICAgLCBtX3RhaWxTZW50aW5l
bChTZW50aW5lbCkKIHsKQEAgLTY5LDIxICsxMDgsMjQgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE5v
ZGU+IGlubGluZSBTZW50aW5lbAogICAgIG1fdGFpbFNlbnRpbmVsLnNldE5leHQoMCk7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPiBpbmxpbmUgdHlwZW5hbWUgU2VudGluZWxMaW5rZWRM
aXN0PE5vZGU+OjppdGVyYXRvciBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OmJlZ2luKCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUgdHlwZW5hbWUgU2Vu
dGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjppdGVyYXRvciBTZW50aW5lbExpbmtlZExpc3Q8
VCwgUmF3Tm9kZT46OmJlZ2luKCkKIHsKLSAgICByZXR1cm4gbV9oZWFkU2VudGluZWwubmV4dCgp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9oZWFkU2VudGluZWwubmV4dCgpKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+IGlubGluZSB0eXBlbmFtZSBTZW50aW5lbExpbmtl
ZExpc3Q8Tm9kZT46Oml0ZXJhdG9yIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6ZW5kKCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxpbmUgdHlwZW5hbWUgU2Vu
dGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjppdGVyYXRvciBTZW50aW5lbExpbmtlZExpc3Q8
VCwgUmF3Tm9kZT46OmVuZCgpCiB7Ci0gICAgcmV0dXJuICZtX3RhaWxTZW50aW5lbDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KCZtX3RhaWxTZW50aW5lbCk7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBOb2RlPiBpbmxpbmUgdm9pZCBTZW50aW5lbExpbmtlZExpc3Q8Tm9kZT46OnB1c2go
Tm9kZSogbm9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSYXdOb2RlPiBpbmxp
bmUgdm9pZCBTZW50aW5lbExpbmtlZExpc3Q8VCwgUmF3Tm9kZT46OnB1c2goVCogbm9kZSkKIHsK
ICAgICBBU1NFUlQobm9kZSk7Ci0gICAgTm9kZSogcHJldiA9ICZtX2hlYWRTZW50aW5lbDsKLSAg
ICBOb2RlKiBuZXh0ID0gbV9oZWFkU2VudGluZWwubmV4dCgpOworICAgIEFTU0VSVCghbm9kZS0+
cHJldigpKTsKKyAgICBBU1NFUlQoIW5vZGUtPm5leHQoKSk7CisgICAgCisgICAgUmF3Tm9kZSog
cHJldiA9ICZtX2hlYWRTZW50aW5lbDsKKyAgICBSYXdOb2RlKiBuZXh0ID0gbV9oZWFkU2VudGlu
ZWwubmV4dCgpOwogCiAgICAgbm9kZS0+c2V0UHJldihwcmV2KTsKICAgICBub2RlLT5zZXROZXh0
KG5leHQpOwpAQCAtOTIsMTcgKzEzNCwyNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4gaW5s
aW5lIHZvaWQgU2VuCiAgICAgbmV4dC0+c2V0UHJldihub2RlKTsKIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIE5vZGU+IGlubGluZSB2b2lkIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPjo6cmVtb3Zl
KE5vZGUqIG5vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmF3Tm9kZT4gaW5s
aW5lIHZvaWQgU2VudGluZWxMaW5rZWRMaXN0PFQsIFJhd05vZGU+OjpyZW1vdmUoVCogbm9kZSkK
IHsKLSAgICBOb2RlKiBwcmV2ID0gbm9kZS0+cHJldigpOwotICAgIE5vZGUqIG5leHQgPSBub2Rl
LT5uZXh0KCk7CisgICAgQVNTRVJUKG5vZGUpOworICAgIEFTU0VSVCghIW5vZGUtPnByZXYoKSk7
CisgICAgQVNTRVJUKCEhbm9kZS0+bmV4dCgpKTsKKyAgICAKKyAgICBSYXdOb2RlKiBwcmV2ID0g
bm9kZS0+cHJldigpOworICAgIFJhd05vZGUqIG5leHQgPSBub2RlLT5uZXh0KCk7CiAKICAgICBw
cmV2LT5zZXROZXh0KG5leHQpOwogICAgIG5leHQtPnNldFByZXYocHJldik7CisgICAgCisgICAg
bm9kZS0+c2V0UHJldigwKTsKKyAgICBub2RlLT5zZXROZXh0KDApOwogfQogCiB9CiAKK3VzaW5n
IFdURjo6QmFzaWNSYXdTZW50aW5lbE5vZGU7CiB1c2luZyBXVEY6OlNlbnRpbmVsTGlua2VkTGlz
dDsKIAogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>